Cod sursa(job #1190272)

Utilizator TibixbAndrei Tiberiu Tibixb Data 24 mai 2014 21:22:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
int t[100001], n, i, d[100001], v[100001], k, p, u, mij;
ifstream in("scmax.in");
ofstream out("scmax.out");
void drum(int x) {
    if (x!=0) {
        drum(t[x]);
        out<<v[x]<<" ";
    }
}
int main() {
    in>>n;
    in>>v[1];
    k=1;
    d[1]=1;
    for(i=2; i<=n; i++){
        in>>v[i];
        p=1; u=k;
        while(p<=u){
            mij=p+(u-p)/2;
            if(v[d[mij]]>=v[i])
                    u=mij-1;
            else
                p=mij+1;
        }
        if(p>k){
            d[++k]=i;
            t[i]=d[p-1];
        }
        else{
            if(v[i]<v[d[p]]){
                d[p]=i;
                t[i]=d[p-1];
            }
        }
    }
    out<<k<<"\n";
    drum(d[k]);
    return 0;
}