Cod sursa(job #1191169)

Utilizator misinozzz zzz misino Data 26 mai 2014 18:59:54
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
#include<algorithm>

#define N 100100

using namespace std;

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

int n,poz,lg,i,ll,l[N],a[N],p[N],sol[N];

int main(){
    f >> n;

    for(i = 1 ; i <= n ; ++i)
        f >> a[i];

    l[1] = a[1];
    p[1] = 1;
    lg = 1;

    for(i = 2 ; i <= n ; ++ i)
    {
        poz = upper_bound(l + 1 , l + lg + 1 , a[i]) - l;

        if(l[poz - 1] == a[i])
            -- poz;

        l[poz] = a[i];
        p[i] = poz;

        lg = max(lg , poz);
    }
    ll = lg;

    g << lg << '\n';

    for(i = n ; i ; -- i)
        if(p[i] == lg)
    {
        sol[lg --] = i;
    }

    for(i = 1 ; i <= ll ; ++ i)
        g << a[sol[i]] << ' ';

    g << '\n';

    return 0;
}