Pagini recente » Cod sursa (job #11192) | Cod sursa (job #751454) | Cod sursa (job #1010996) | Cod sursa (job #2005207) | Cod sursa (job #1750512)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int v[100010],q[100010],sol[100010],d[100010],tata[100010],nr;
int cauta_binar(int s)
{
int st=1,dr=nr;
while(st<=dr)
{
int mid=(st+dr)/2;
if(s<=v[q[mid]]) dr=mid-1;
else st=mid+1;
}
return st;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
for(int i=1;i<=n;i++)
{
int poz=cauta_binar(v[i]);
if(poz>nr) nr++;
q[poz]=i;
d[i]=d[q[poz-1]]+1;
tata[i]=q[poz-1];
}
int maxx=0,poz=0,nr=0;
for(int i=1;i<=n;i++)
if(d[i]>maxx) {maxx=d[i];poz=i;}
for(int i=poz;i>0;i=tata[i]) sol[++nr]=v[i];
printf("%d\n",nr);
for(int i=nr;i;i--) printf("%d ",sol[i]);
return 0;
}