Cod sursa(job #1363611)

Utilizator MarcusPopMarcus Pop MarcusPop Data 27 februarie 2015 08:55:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

int N, L, v[100001], longmax[100001], last[100001];

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

void afisaresubmax(int n){
    if(longmax[n])
        afisaresubmax(longmax[n]);
    g<<v[n]<<' ';
}

int main()
{
    f>>N;
    for(int i=1;i<=N;++i)
        f>>v[i];
    last[1]=1;
    L=1;
    for(int i=2;i<=N;++i){
        int st=1,dr=L,m;
        while(st <= dr){
            m=(dr+st)/2;
            if(v[last[m]]<v[i])
                st=m+1;
            else
                dr=m-1;
        }
        if(st-L==1)
            ++L;
        last[st]=i;
        // longmax[i]=last[st-1];
        longmax[i]=last[st-1];
    }
    g<<L<<'\n';
    afisaresubmax(last[L]);
    return 0;
}