Cod sursa(job #921791)
| Utilizator | Data | 21 martie 2013 13:47:44 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 60 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.08 kb |
#include <cstdio>
bool gasit;
int v[100010], p[100010], q[100010], i, j, v1[100010], last, n;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d", &v[i]);
gasit=false;
for(j=1;j<=q[0];j++)
if(q[j]>v[i])
{
q[j]=v[i];
p[i]=j;
gasit=true;
break;
}
else
if(q[j]==v[i])
{
gasit=true;
break;
}
if(!gasit)
{
q[++q[0]]=v[i];
p[i]=q[0];
}
}
printf("%d\n", q[0]);
i=q[0]; last=n;
while(i>0)
{
for(j=last;j>=1;j--)
if(p[j]==i)
{
v1[++v1[0]]=v[last];
last=j-1;
i--;
break;
}
}
for(i=v1[0];i>=1;i--)
printf("%d ", v1[i]);
printf("\n");
return 0;
}
