Cod sursa(job #1083822)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 16 ianuarie 2014 14:22:45
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
int n,i,j,v[100100],x[100100],t[100100],y[100100],p,u,mid,l,nr,ok;
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]);
    }
    l=0;

    for(i=1;i<=n;i++){
        p=1;
        u=l;
        ok=0;
        while(p<=u){
            mid=(p+u)/2;
            if(v[x[mid]]>v[i])
                u=mid-1;
            else if(v[x[mid]]<v[i])
                p=mid+1;
            else{
                ok=1;
                break;
            }
        }

        if(ok==0)
            if(p==l+1){
                l++;
                x[l]=i;
                t[i]=x[l-1];
            }
            else if(p==1){
                x[p]=i;
                t[i]=-1;
            }
            else{
                x[p]=i;
                t[i]=x[i-1];
            }
    }
    fprintf(g,"%d\n",l);
    i=x[l];
    while(i!=-1){
        nr++;
        y[nr]=v[i];
        i=t[i];
    }
    for(i=nr;i>=1;i--){
        fprintf(g,"%d ",y[i]);
    }
    fclose(f);
    fclose(g);
    return 0;
}