Cod sursa(job #422124)
Utilizator | Data | 22 martie 2010 10:38:43 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.56 kb |
#include<stdio.h>
int n,v[1<<17],poz[1<<17];
int main()
{
int i,st,dr,m;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d\n",&v[i]);
for (i=1;i<=n;++i)
if (v[i]>=poz[poz[0]])
poz[++poz[0]]=v[i];
else
{
st=1;
dr=poz[0];
while(st<dr)
{
m=(st+dr)/2;
if (v[m]>=st)
st=m+1;
else
dr=m-1;
}
poz[st]=v[i];
}
printf("%d\n",poz[0]);
for (i=1;i<=poz[0];++i)
printf("%d ",poz[i]);
return 0;
}