Cod sursa(job #87683)

Utilizator bogdan25bogdan25 bogdan25 Data 28 septembrie 2007 18:41:13
Problema Subsir 2 Scor 18
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
//infoarena subsir2
// http://infoarena.ro/problema/subsir2
//O(n^2)
#include <cstdio>
#include <cstdlib>
#include <algorithm>

#define INF 0x7FFFFFFF

using namespace std;

#define MAX 5000

int v[MAX], N, Lmin, L[MAX];

void calc()
{
    L[N-1] = 1;
    for (int i = N-2; i>=0; i--)
    {
        int vmin = INF, l = INF;
        for (int j = i+1; j<N; j++)
        {

            if (v[j] >= v[i] && v[j] < vmin && L[j] < l)
                  l = L[j];
            if (v[j] >=v[i]) vmin = min(vmin, v[j]);
        };
        if (l==INF) l =0;
        L[i] = l + 1;
    };
};




int main()
{
    freopen("subsir2.in", "r", stdin);
    freopen("subsir2.out", "w", stdout);

    scanf("%d\n", &N);
    for (int i = 0; i<N; i++)
        scanf("%d", &v[i]);

    calc();

    for (int i=0; i<N; i++)
        Lmin = max(Lmin, L[i]);

    printf("%d\n", Lmin);
    fclose(stdin);
    fclose(stdout);
    return 0;
};