Cod sursa(job #214970)

Utilizator katakunaCazacu Alexandru katakuna Data 17 octombrie 2008 08:58:27
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>

int sol[100011],max,p,u,mij,n,i,v[100011],x,X[100011],t[100011];

int main(){

FILE *f=fopen("scmax.in","r");
fscanf(f,"%d",&n);

   for(i=1;i<=n;i++)
   fscanf(f,"%d",&v[i]);

fclose(f);

X[1]=1;
x=1;

   for(i=2;i<=n;i++){
   p=1;
   u=x;

      while(p<=u){
      mij=(p+u)/2;

        if( v[X[mij]] >= v[i] )
        u=mij-1;

        else
        p=mij+1;

      }

      if(u==x){
        if(v[i]>v[X[x]]){
        t[i]=X[x];
        x++;
        X[x]=i;
        }

      //  else{
       // t[i]=t[X[u]];
        //X[u]=i;
        //}
        
      }
      
      else{
      t[i]=t[X[p]];
      X[p]=i;
      }
      
   }

   for(i=1;i<=n;i++){
     if(X[i])
     max=i;

     else
     break;

   }

FILE *g=fopen("scamx.out","w");
fprintf(g,"%d\n",max);
int j=X[max];

    for(i=max;i>=1;i--){
    sol[i]=v[j];
    j=t[j];
    }

    for(i=1;i<=max;i++)
    fprintf(g,"%d ",sol[i]);

fclose(g);


return 0;
}