Cod sursa(job #919166)

Utilizator teoionescuIonescu Teodor teoionescu Data 19 martie 2013 14:16:25
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int i,n,nr,v[1001],u[1001],pred[1001],p,ok=1,k=0,af[1001];
int caut(int x){
    int i=0,pas=1<<16;
    while(pas!=0){
        if(i+pas<=nr && v[u[i+pas]]<x) i+=pas;
        pas/=2;
    }
    return i+1;
}
int main(){
    in>>n;
    for(i=1;i<=n;i++) in>>v[i];
    u[++nr]=1;
    for(i=2;i<=n;i++){
        p=caut(v[i]);
        if(p>nr) nr++;
        pred[i]=u[p-1];
        u[p]=i;
    }
    out<<nr<<'\n';
    p=u[nr];
    while(ok){
        if(pred[p]==0) ok=0;
        af[++k]=v[p];
        p=pred[p];
    }
    for(i=k;i>=1;i--) out<<af[i]<<' ';
    return 0;
}