Cod sursa(job #1165486)

Utilizator andreiiiiPopa Andrei andreiiii Data 2 aprilie 2014 18:43:57
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <algorithm>
#include <cstdio>

using namespace std;

const int N=100005;

int a[N], b[N], nxt[N], poz[N];

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    int n, m=0, i, j, sol=0, solp;
    scanf("%d", &n);
    for(i=1;i<=n;i++) scanf("%d", &a[i]);
    for(i=1;i<=n;i++)
    {
        j=lower_bound(b+1, b+sol+1, a[i])-b;
        if(j>sol)
        {
            sol=j;
            solp=i;
        }
        b[j]=a[i];
        poz[j]=i;
        nxt[i]=poz[j-1];
    }
    printf("%d\n", sol);
    for(i=solp;i;i=nxt[i]) b[++m]=a[i];
    for(i=m;i;i--) printf("%d ", b[i]);
}