Pagini recente » Cod sursa (job #368420) | Cod sursa (job #2071180) | Cod sursa (job #944095) | Borderou de evaluare (job #1036787) | Cod sursa (job #202156)
Cod sursa(job #202156)
#include <stdio.h>
#define N 100000
long scmax[N];
long nivel[N];
long tata[N];
long n;
FILE *fin,*fout;
int main ()
{fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
long i,j,nt,nmax,flag,k; //nivel maxim
fscanf(fin,"%ld",&n);
for (i=1;i<=n;i++)
{fscanf(fin,"%ld",&scmax[i]);}
nivel[1]=1;
for (i=2,nmax=1;i<=n;i++)
{nivel[i]=1;//in caz ca nu se intampla nimic ramane 1
for(k=nmax;k>=1;k--)
{flag=1;
for (j=i-1;j>=1;j--)
{if(nivel[j]==k&&scmax[j]<scmax[i])
{nivel[i]=k+1;
if(nmax<k+1){nmax=k+1;}
tata[i]=j;
flag=0;break;
}
}
if(flag==0){break;}
}
}
for (i=0;i<=n;i++)
{if(nivel[i]==nmax)
{for(j=nmax;tata[i];i=tata[i],j--)
{nivel[j]=scmax[i];
}
break;
}
}
fprintf(fout,"%ld\n",nmax);
for (i=1;i<=nmax;i++)
{fprintf(fout,"%ld ",nivel[i]);
}
fclose(fout);
return 0;
}