Cod sursa(job #202156)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 6 august 2008 14:07:49
Problema Subsir crescator maximal Scor 45
Compilator c Status done
Runda Arhiva educationala Marime 0.88 kb
#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;
}