Cod sursa(job #1059676)

Utilizator mihai10stoicaFMI - Stoica Mihai mihai10stoica Data 16 decembrie 2013 21:12:26
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
using namespace std;
ofstream out("scmax.out");
int n,v[100001],best[100001],p[100001],maxim,nr,L[100001];
void rec(int i) { if(p[i]>0) rec(p[i]); out<<v[i]<<" "; }
int caut(int x) {
    int i=0,j=nr,mij;
    while(i<=j) {
        mij=(i+j)/2;
        if(v[L[mij]]<x && v[L[mij+1]]>=x) return mij;
        else if(v[L[mij+1]]<x) i=mij+1;
                else j=mij-1;
    }
    return nr;
}
int main() {
    ifstream in("scmax.in");
    int i,j,poz; nr=1;
    in>>n;
    for(i=1;i<=n;i++) in>>v[i];
    in.close();
    best[1]=L[1]=1; L[0]=0;
    for(i=2;i<=n;i++) {
        poz=caut(v[i]);
        p[i]=L[poz];
        best[i]=poz+1;
        L[poz+1]=i;
        if(nr<poz+1) nr=poz+1;
    }
    maxim=0; poz=0;
    for(i=1;i<=n;i++)
        if(maxim<best[i]) {
            maxim=best[i]; poz=i;
        }
    out<<maxim<<endl;
    rec(poz);
    out.close();
    return 0;
}