Cod sursa(job #994636)

Utilizator gbi250Gabriela Moldovan gbi250 Data 5 septembrie 2013 23:03:48
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <set>
using namespace std;

int n, v[5001], i, j, k, len, pz[5001], MAX, max_len[5001], pos;
bool sw;
set <int> nr, sol;

int main()
{
    freopen("secv.in", "r", stdin);
    freopen("secv.out", "w", stdout);
    scanf("%d", &n);
    for(i=1; i<=n; ++i)
    {
        scanf("%d", &v[i]);
        max_len[i]=1;
        nr.insert(v[i]);
    }

    for(i=1; i<=n-1; ++i)
        for(j=i+1; j<=n; ++j)
            if(v[j]>v[i] && max_len[i]+1>max_len[j])
            {
                max_len[j]=max_len[i]+1;
                if(max_len[j] > MAX)
                    MAX=max_len[j], k=1, pz[1]=j;
                else if(max_len[j] == MAX)
                    pz[++k]=j;
            }

    for(i=pz[k]; k!=0; --k)
    {
        len=0;
        for(j=i; max_len[j]>=1 && MAX; --j)
        {
            if(max_len[j] == MAX)
                --MAX;

            ++len, sol.insert(v[j]), pos=j;
        }
        if(sol.size() == nr.size())
        {
            sw=1;
            break;
        }
        sol.clear();
    }
    if(sw)
        printf("%d\n", len);
    else
        printf("-1\n");
    return 0;
}