Pagini recente » Cod sursa (job #1291867) | Cod sursa (job #1623440) | Cod sursa (job #1520476) | Cod sursa (job #1060745) | Cod sursa (job #2674791)
#include <iostream>
#include <fstream>
#define mx 100001
#define inf -200000000
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, v[mx], L[mx], T[mx];
int poz, st, p, l, f[mx], drum=inf;
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
void rezolvare()
{
for(int i=n;i>=1;i--)
{
if(drum==-inf)
{
L[i]=1;
T[i]=-inf;
drum=1;
f[1]=i;
}
else
{
int poz=-1, x, y;
for(int j=mx;j>=1;j--)
{
x=f[j];
if(v[i]<v[x])
{
poz=j;
break;
}
}
if(poz==-1)
{
f[1]=i;
L[i]=1;
T[i]=inf;
}
else
{
L[i]=poz+1;
x=f[poz];
T[i]=x;
y=poz+1;
if(v[f[y]]<v[i])
f[y]=i;
}
}
if(L[i]>drum)
drum=L[i], st=i;
}
}
void afisare()
{
fout<<drum<<endl;
while(T[st]!=inf)
{
fout<<v[st]<<' ';
st=T[st];
}
fout<<v[st];
fout.close();
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}