Cod sursa(job #872022)

Utilizator CS-meStanca Marian Ciprian CS-me Data 5 februarie 2013 18:07:47
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>
FILE *fin=fopen("scmax.in","r");
FILE *fout=fopen("scmax.out","w");

int n,v[100010],d[100010],L,i,p,u,m,t[100010];

void drum(int p){
    if( t[p] ){
        drum(t[p]);
    }
        fprintf(fout,"%d ",v[p]);
}

int main(){

    fscanf(fin,"%d",&n);
    fscanf(fin,"%d",&v[1]);

    d[1]=1;
    L=1;

    for(i=2;i<=n;i++){
        fscanf(fin,"%d",&v[i]);

        p=1;u=L;
        while(p<=u){
            m=(p+u)/2;

            if( v[d[m]] > v[i] && v[d[m-1]] < v[i] ){
                d[m]=i;
                t[i]=d[m-1];
                break;
            }
            else
            if( v[d[m]] > v[i] ){
                u=m-1;
            }
            else{
                p=m+1;
            }
        }

        if(p>u && v[i]>v[d[L]] ){
            d[++L]=i;
            t[i]=d[L-1];
        }

    }

    fprintf(fout,"%d\n",L);

    drum(d[L]);


return 0;
}