Cod sursa(job #1586503)

Utilizator tiberiu225Iancu Tiberiu tiberiu225 Data 1 februarie 2016 12:16:47
Problema Secv Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int v[5005];
int l[5005];
int c[5005];
int ans[5005];
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n; scanf("%d", &n);
    if(n == 0)
        printf("-1");
    if(n == 1)
        printf("1");
    for(int i = 1; i <= n; ++i) {scanf("%d", &v[i]); c[i] = v[i];}
    sort(c + 1, c + n + 1);
    int nr = 1;
    for(int i = 2; i <= n; ++i)
        if(c[i] != c[i - 1])
            nr++;
    l[1] = 1;
    int p = 1;
    int ok = 0;
    for(int i = 2; i <= n; ++i)
    {
        int maxim = 0, r = 0;
        for(int j = i - 1; j >= 1; --j)
        {
            if(v[j] < v[i] and l[j] > maxim)
            {
                maxim = l[j];
                l[i] = l[j] + 1;
                r = j;
            }
        }
        if(r == 0)
            l[i] = 1;
        else ans[i] = r;
        if(l[i] == nr)
			{
				p = i;
				ok = 1;
				break;
			}
    }
    if(ok == 0)
        {printf("-1"); return 0;}
    int sf = p;
    while(l[p] != 1)
    {
        p = ans[p];
    }
    printf("%d", sf - p + 1);
    return 0;
}