Cod sursa(job #1153931)

Utilizator lilian_ciobanuLilian Ciobanu lilian_ciobanu Data 25 martie 2014 20:58:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>

using namespace std;

const int NMAX=100009;

ifstream f("scmax.in");
ofstream g("scmax.out");

int a[NMAX], b[NMAX], p[NMAX];

int cauta(int s, int d, int x){
    int m;

    while(s < d){
        m=(s+d)/2;

        if(a[b[m]]<x)
            s=m+1;
        else
            d=m;
    }

    return s;
}

void scrie(int x){

    if(x>0){
        scrie(p[x]);
        g<<a[x]<<' ';
    }

}


int main(){
    int n,i,r=0,m,x,pz;

    f>>n;
    for(i=1; i<=n; ++i){
        f>>a[i];
    }

    for(i=1; i<=n; ++i){
        pz=cauta(1,r,a[i]);

        if(a[i] > a[b[pz]]){
            r++;
            b[r]=i;
            p[i]=b[r-1];
        }
        else{
            b[pz]=i;
            p[i]=b[pz-1];
        }

    }

    g<<r<<'\n';
    scrie(b[r]);



return 0;
}