Cod sursa(job #1555106)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 22 decembrie 2015 12:11:08
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <set>
#define Nmax 5010

using namespace std;

set <int> S;
int v[Nmax],best[Nmax];

int main()
{
    int n,i,start,j,prec,sz;
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);

    scanf("%d",&n);

    for(i = 0;i<n;i++)
    {
        scanf("%d",&v[i]);
        S.insert(v[i]);
    }

    sz = S.size();

    for(i = n - 2;i>=0;i--)
        for(j = i + 1;j<n;j++)
            if(v[i] < v[j] && best[j] + 1 > best[i])
            {
                best[i] = best[j] + 1;
                if(v[i] == *S.begin() && best[i] == sz - 1)
                {
                    start = i;
                    i = -1;
                    break;
                }
            }
    prec = start;

    for(i = start + 1;i < n;i++)
        if(v[i] > v[prec] && best[i] == best[prec] - 1)
        {
            prec = i;
            if(best[i] == 0)
                break;
        }

    printf("%d",i - start + 1 > n ? -1 : i - start + 1);
}