Pagini recente » Cod sursa (job #2591765) | Cod sursa (job #278677) | Cod sursa (job #2941161) | Cod sursa (job #2447099) | Cod sursa (job #1190592)
#include <cstdio>
#define LIM 100000
using namespace std;
int v[LIM+10],len[LIM+10],tata[LIM+10], lg;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,max,poz, st, dr, mj;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",v+i);
for(i=1;i<=n;++i)
{
st=1; dr=lg;
while(st<=dr){
mj=(st+dr)>>1;
if(v[i]>v[len[mj]])
st=mj+1;
else
dr=mj-1;
}
tata[i]=len[dr];
if(st>lg){
lg = st;
len[lg] = i;
}
else
if(v[i]<v[len[st]])
len[st]=i;
}
printf("%d\n", lg);
poz = len[lg];
for(i=1; i<=lg; i++)
{
len[i] = v[poz];
poz=tata[poz];
}
for(i=lg; i>=1; i--)
printf("%d ", len[i]);
return 0;
}