Cod sursa(job #1377739)

Utilizator IgorDodonIgor Dodon IgorDodon Data 6 martie 2015 00:33:12
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
#define MAXN 100005
FILE *f=fopen("scmax.in","r"), *g=fopen("scmax.out","w");

long int N, v[MAXN], Q[MAXN], hQ;

void Citire(){
long int i;

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

}

void Rezolvare(){
long int i, k1, k2, mij, nr;

    Q[1]=v[1]; hQ=1;
    for(i=2;i<=N;i++){

        nr = v[i];
        if( nr > Q[hQ] ){ Q[++hQ]=nr; }
        else{

            k1=1; k2=hQ;
            while( k1<=k2 ){

                mij = (k1+k2)/2;
                if( Q[mij-1] < nr && nr <= Q[mij] ) { Q[mij] = nr; break; }
                if( Q[mij] < nr ) k1 = mij+1;
                else k2 = mij-1;

            }
        }

    }
    fprintf(g,"%ld\n",hQ);
    for(i=1;i<=hQ;i++) fprintf(g,"%ld ",Q[i]);

}

int main(){

    Citire();
    Rezolvare();

return 0;
}