Cod sursa(job #1401206)

Utilizator 4ONI2015oni2015 4ONI2015 Data 25 martie 2015 18:25:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;
int p, sol, i, n, a[100005], back[100005], v[100005];
bool crit(int x, int y)
{
    return a[x] < a[y];
}
void afis(int poz)
{
    if(!poz)
        return;
    afis(back[poz]);
    printf("%d ", a[poz]);
}
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        p = lower_bound(v + 1, v + sol + 1, i, crit) - v;
        back[i] = v[p - 1];
        if(p > sol)
        {
            sol = p;
            v[p] = i;
            continue;
        }
        if(a[i] < a[v[p]])
            v[p] = i;
    }
    printf("%d\n", sol);
    afis(v[sol]);
    return 0;
}