Pagini recente » Cod sursa (job #221451) | Cod sursa (job #1183944) | Cod sursa (job #1580114) | Cod sursa (job #163749) | Cod sursa (job #945040)
Cod sursa(job #945040)
#include <cstdio>
using namespace std;
long a[200000],aux[200000],b[200000],c=1,n;
int i,poz,maxm=0,imax;
int cautare(int x)
{
int p=1,q=c,m;
if(a[b[q]]<x) return q+1;
while(p<q)
{
m=(p+q)>>1;
if(a[b[m]]>=x) q=m;
else p=m+1;
}
return p;
}
void write (int x)
{
if(aux[x]>0)
write (aux[x]);
printf("%d ",a[x]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
b[1]=1;
for(i=2; i<=n; i++)
{
poz=cautare(a[i]);
aux[i]=b[poz-1];
b[poz]=i;
if(poz>c) c++;
if(poz>maxm)
{
maxm=poz;
imax=i;
}
}
printf("%d\n",maxm);
write(imax);
fclose(stdin);
fclose(stdout);
return 0;
}