Cod sursa(job #931718)

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

const int N = 100100, MAX = 2000000001;
int n, v[N], val[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 max){
    fprintf(out,"%d\n",max);
    for(register int i=1; i<=max; i++)
        fprintf(out,"%d ",v[val[i]]);
}

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;
        if(nr>max)
            max=nr;
    }
    afisare(max);
    fclose(in);
    fclose(out);
    return 0;
}