Cod sursa(job #1019572)

Utilizator vladstoickvladstoick vladstoick Data 31 octombrie 2013 15:31:04
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N = 100010;
int v[N], u[N],pred[N];
int n,m,j;
void afis(int x){
    if(x==0) return;
    afis(pred[x]);
    out<<v[x]<<" ";
}
int cautbinar(int x){
    int rezultat=0;
    for(int step = 1<<16; step>0 ; step>>=1){
        if(v[u[rezultat+step]]<x && rezultat+step <= m){
            rezultat += step;
        }
    }
    return rezultat+1;
}
int main()
{
    in>>n;
    for(int i=1;i<=n;i++){
        in>>v[i];
    }
    u[++m]=1;
    for(int i=2;i<=n;i++){
        j=cautbinar(v[i]);
        pred[i]=u[j-1];
        u[j]=i;
        if(j==m+1) m++;
    }
    out<<m<<"\n";
    afis(u[m]);
    return 0;
}