Cod sursa(job #1414622)

Utilizator IgorDodonIgor Dodon IgorDodon Data 2 aprilie 2015 20:15:34
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#define MAXN 100005
FILE *f=fopen("scmax.in","r"), *g=fopen("scmax.out","w");

int N, HQ=0, v[MAXN], Q[MAXN], P[MAXN], Sol[MAXN], Poz;

int Pune( int nr ){
int p, u, mij;

    if( nr > Q[HQ] ){ Q[++HQ] = nr; return HQ; }

    p = 1; u = HQ;
    while( p <= u ){

        mij = (p+u)/2;
        if( Q[mij-1] < nr && nr <= Q[mij] ){
            Q[mij] = nr;
            return mij;
        }
        else if( nr < Q[mij-1] )
            u = mij - 1;
        else
            p = mij + 1;

    }
    printf("IESE");

}

void Citire(){
int i, x;

    fscanf(f,"%d\n",&N);
    for(i=1;i<=N;i++){

        fscanf(f,"%d",&v[i]);
        P[i] = Pune(v[i]);

    }

}

void Afisare(){
int i;

    Poz = HQ;
    for(i=N;i>=1;i--){

        if( P[i] == Poz )
            Sol[Poz--] = v[i];

    }
    fprintf(g,"%d\n",HQ);
    for(i=1;i<=HQ;i++)
        fprintf(g,"%d ",Sol[i]);

}

int main(){

    Citire();
    Afisare();

return 0;
}