Pagini recente » Cod sursa (job #3128093) | Cod sursa (job #1838100) | Cod sursa (job #1556356) | Cod sursa (job #412828) | Cod sursa (job #202173)
Cod sursa(job #202173)
#include <stdio.h>
#define N 100000
long scmax[N];
long tata[N];
long p[N];
long urm[N];
long n,nmax;
FILE *fin,*fout;
int main ()
{fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
long i,j,flag,k;
fscanf(fin,"%ld",&n);
for (i=1;i<=n;i++)
{fscanf(fin,"%ld",&scmax[i]);}
p[1]=1;
urm[1]=0;
nmax=1;
for (i=2;i<=n;i++)
{//nivel[i]=1;//in caz c nu se intampla nimic ramane 1
for(k=nmax;k>=1;k--)
{flag=0;
for (j=p[k];j;j=urm[j])
{if(scmax[j]<scmax[i])
{tata[i]=j;
if(k==nmax)
{nmax++;
p[nmax]=i;
}
else
{urm[i]=p[k+1];
p[k]=i;
}
flag=1; break;
}
}
if(flag==1){break;}
}
if(flag==0)
{urm[i]=p[1];p[1]=i;
}
}
for(i=nmax,j=p[nmax];j;j=tata[j],i--)
{urm[i]=scmax[j];
}
fprintf(fout,"%ld\n",nmax);
for (i=1;i<=nmax;i++)
{fprintf(fout,"%ld ",urm[i]);
}
fclose(fout);
return 0;
}