Cod sursa(job #931734)

Utilizator Master011Dragos Martac Master011 Data 28 martie 2013 14:26:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
using namespace std;
FILE *in,*out;

const int N = 100100, MAX = 2000000001;
int n, v[N], val[N], pred[N] ;
void citire(){
    fscanf(in,"%d",&n);
    for(register int i=1; i<=n; i++){
        fscanf(in,"%d",&v[i]);
        val[i]=MAX;
    }
}

int caut_bin (int a, int max){
    int loc=0,pas=1<<16;
    while(pas!=0){
       if(loc+pas<=max && v[val[loc+pas]] < a)
            loc+=pas;
        pas>>=1;
    }
    return loc + 1;
}


void afisare(int x){
    if(x)
        afisare(pred[x]);
    if(x)
        fprintf(out,"%d ",v[x]);
}

int main(){
    in=fopen("scmax.in","r");
    out=fopen("scmax.out","w");

    citire();
    val[1]=1;
    int nr,max=1;
    for(register int i=2;i<=n;i++){
        nr=caut_bin(v[i],max);
        val[nr]=i;
        pred[i]=val[nr-1];
        if(nr>max)
            max=nr;
    }
    fprintf(out,"%d\n",max);

    afisare(val[max]);
    fclose(in);
    fclose(out);
    return 0;
}