Cod sursa(job #202171)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 6 august 2008 15:58:04
Problema Subsir crescator maximal Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.92 kb
#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];
      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;
}