Cod sursa(job #2018866)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 6 septembrie 2017 10:16:01
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, i, j, max1, max2, ult[5005], a[5005], b[5005], x[5005], cnt;

int main() {
    f >> n;
    for (i = 1; i <= n; i++)
        f >> a[i], x[i] = a[i];

    sort(x+1, x+n+1);
    for (i = 1; i <= n; i++)
        if (x[i] != x[i-1]) cnt++;
    //g << cnt << '\n';

    for (i = n; i >= 1; i--) {
        max1 = 0;
        ult[i] = 6000;

        for (j = i+1; j <= n; j++)
            if (max1 < b[j] && a[i] < a[j])
                max1 = b[j];

        for (j = i+1; j <= n; j++)
            if (max1 == b[j] && ult[j] < ult[i])
                ult[i] = ult[j];

        if (max1 == 0)
            ult[i] = i;
        b[i] = max1+1;
    }
    for (i = 1; i <= n; i++)
        if (max1 < b[i])
            max1 = b[i], max2 = ult[i]-i+1;
        else if (max1 == b[i] && ult[i]-i+1 < max2)
            max2 = ult[i]-i+1;

    if (max1 == cnt)
        g << max2;
    else g << -1;
}