Pagini recente » Cod sursa (job #1985552) | Cod sursa (job #1535947) | Cod sursa (job #2282192) | Cod sursa (job #797056) | Cod sursa (job #548633)
Cod sursa(job #548633)
#include <cstdio>
#define infile "scmax.in"
#define outfile "scmax.out"
#define MaxN 100005
#define maxim(a,b) a>b?a:b
int v[MaxN],x[MaxN],t[MaxN],N,max;
void read()
{
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
}
int cauta(int poz)
{
int i,l=0;
for(i=1<<17;i>0;i/=2)
if(l+i<=max && v[x[l+i]]<v[poz])
l+=i;
return l;
}
void solve()
{
int i,l;
for(i=1;i<=N;i++)
{
l=cauta(i);
x[l+1]=i;
max=maxim(max,l+1);
t[i]=x[l];
}
}
void write(int poz)
{
if(poz>0)
{
write(t[poz]);
printf("%d ",v[poz]);
}
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
solve();
printf("%d\n",max);
write(x[max]);
fclose(stdin);
fclose(stdout);
return 0;
}