Cod sursa(job #1736821)

Utilizator Emy1337Micu Emerson Emy1337 Data 2 august 2016 17:43:46
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");

const int MAXN = 5e3+5;
int n, v[MAXN], dim[MAXN], start = 1, stop, elemCurr, elemInit;
int miny = ~(1<<31), maxy;
map <int, int> mapa;

int main()
{
    fin>>n;
    stop = n;
    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
        miny = min(miny, v[i]);
        maxy = max(maxy, v[i]);
        if(!mapa[v[i]]) elemInit++;
        mapa[v[i]]++;
    }

    elemCurr = elemInit;

    while(elemCurr == elemInit)
    {
        if(mapa[v[start]] == 1) break;
        mapa[v[start++]]--;
    }

    while(elemCurr == elemInit)
    {
        if(mapa[v[stop]] == 1) break;
        mapa[v[stop--]]--;
    }

    while(v[stop] != maxy && stop<=n)   stop--;
    while(v[start] != miny && start>=1) start--;

    if(v[start]!= miny || v[stop]!=maxy)
    {
        fout<<-1;
        exit(0);
    }

    for(int i=stop; i>=start; i--)
    {
        int maxyy = 0;
        for(int j=i+1; j<=stop; j++)
        {
            if(v[i] < v[j]) maxyy = max(maxyy, dim[j]);
        }
        dim[i] = maxyy + 1;
    }

    for(int i=stop; i>=start; i--)
        if(dim[i] == elemInit)
        {
            fout<<stop-start+1;
            exit(0);
        }

    fout<<-1;
}