Cod sursa(job #1487446)

Utilizator DeltaMTP Dragos DeltaM Data 16 septembrie 2015 21:12:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
int n,i,j,p,u,mid,a,nr,v[100100],x[100100],t[100100],sol[100100];
FILE *f,*g;
int main(){
    f=fopen("scmax.in","r");
    g=fopen("scmax.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&v[i]);
    }
    x[0]=-1;
    x[1]=1;
    t[1]=-1;
    nr=1;
    for(i=2;i<=n;i++){
        p=1;
        u=nr;
        while(p<=u){
            mid=(p+u)/2;
            if( v[i] > v[ x[ mid ] ] )
                p=mid+1;
            else
                u=mid-1;
        }
        if(p>nr)
            nr=p;
        x[p]=i;
        t[ x[ p ] ] = x[p-1];
    }
    fprintf(g,"%d\n",nr);
    a=x[nr];
    nr=0;
    while(t[a]!=-1){
        sol[++nr]=v[a];
        a=t[a];
    }
    sol[++nr]=v[a];
    for(i=nr;i>=1;i--){
        fprintf(g,"%d ",sol[i]);
    }
    fclose(f);
    fclose(g);
    return 0;
}