Cod sursa(job #2000126)

Utilizator workwork work work Data 12 iulie 2017 17:49:55
Problema Secv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

FILE *F = fopen("secv.in", "r"), *G = fopen("secv.out", "w");

int k, u, p, n, w[5001], v[5001], m[5001], maxx, Max, K;

int main()
{
    fscanf(F, "%d ", &n);
    for(int i = 1; i <= n; ++ i) fscanf(F, "%d ", &v[i]), w[i] = v[i];
    sort(w+1, w+n+1); K = 1;
    for(int i = 2; i <= n; ++ i) if(w[i] != w[i-1]) K++;
    m[1] = 1;
    w[1] = 1; Max = 1; p = 1; u = 1;
    for(int i = 2; i <= n; ++ i)
    {
        maxx = -1; k = 0;
        for(int j = i-1; j > 0; -- j)
            if(m[j] > maxx && v[j] < v[i]) k = j, maxx = m[j];
        !k ? w[i] = i : w[i] = w[k];
        m[i] = m[k]+1;
        if(m[k]+1 > Max) Max = m[k]+1, p = w[i], u = i;
        else if(m[k]+1 == Max && u-p+1 > i-w[i]+1) p = w[i], u = i;
    }
    if(Max != K) fprintf(G, "%d", -1);
    else fprintf(G, "%d", u-p+1);
    return 0;
}