Cod sursa(job #1329274)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 29 ianuarie 2015 12:25:01
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int n,i,j,a,nrr,v[100100],p,u,mid,nr,x[100100],s[100100],t[100100];
FILE *f,*g;
int main(){
    f=fopen("scmax.in","r");
    g=fopen("scmax.out","w");
    fscanf(f,"%d%d",&n,&v[1]);
    /*fscanf(f,"%d",&n);
    srand(time(0));
    v[1]=rand();
    fprintf(g,"%d ",v[1]);
    */
    nr=1;
    x[nr]=1;
    /*for(i=2;i<=n;i++){
        v[i]=rand();
        fprintf(g,"%d ",v[i]);
    }*/
    for(i=2;i<=n;i++){
        fscanf(f,"%d",&v[i]);
        //v[i]=rand();
        //fprintf(g,"%d ",v[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;
        }
        x[p]=i;
        t[i]=x[p-1];
        if(p>=nr){
            nr=p;
        }
    }
    fprintf(g,"%d\n",nr);
    a=x[nr];
    while(a!=0){
        s[++nrr]=a;
        a=t[a];
    }
    for(i=nrr;i>=1;i--){
        fprintf(g,"%d ",v[ s[i] ]);
    }

    fclose(f);
    fclose(g);
    return 0;
}