Cod sursa(job #2000107)

Utilizator workwork work work Data 12 iulie 2017 17:20:25
Problema Secv Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 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][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][0] = 1; m[1][1] = v[1];
    w[1] = 1;
    for(int i = 2; i <= n; ++ i)
    {
        maxx = -1; k = 0;
        for(int j = i-1; j > 0; -- j)
            if(m[j][0] > maxx && m[j][m[j][0]] < v[i]) k = j, maxx = m[j][0];
        for(int j = 1; j <= m[k][0]; ++j)
            m[i][j] = m[k][j];
        !k ? w[i] = i : w[i] = w[k];
        m[i][0] = m[k][0]+1; m[i][m[k][0]+1]=v[i];
        if(m[k][0]+1 > Max) Max = m[k][0]+1, p = w[i], u = i;
        else if(m[k][0]+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;
}