Pagini recente » Cod sursa (job #1723574) | Cod sursa (job #2401301) | Cod sursa (job #1676714) | Cod sursa (job #1267129) | Cod sursa (job #2774979)
#include <iostream>
#include<fstream>
#define l 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int lg[l], k, n, v[l], p[l], sol[l], nr;
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>v[i];
lg[1]=v[1], p[1]=1, k=1;
for(int i=2; i<=n; i++)
if(v[i]>lg[k])
lg[++k]=v[i], p[i]=k;
else
{
int st=1, dr=k, poz=k+1;
while(st<=dr)
{
int m=(st+dr)/2;
if(v[i]<lg[m])
poz=m, dr=m-1;
else st=m+1;
}
lg[poz]=v[i], p[i]=poz;
}
g<<k<<"\n";
int i=n;
for(int j=k; j>=1; j--)
{
while(p[i]!=j)
i--;
sol[++nr]=v[i];
}
for(int i=nr; i>=1; i--)
g<<sol[i]<<" ";
return 0;
}