Pagini recente » Cod sursa (job #409566) | Cod sursa (job #1091520) | Cod sursa (job #2206040) | Cod sursa (job #2025912) | Cod sursa (job #2000107)
#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;
}