Pagini recente » Cod sursa (job #791344) | Cod sursa (job #2275331) | Monitorul de evaluare | Cod sursa (job #273886) | Cod sursa (job #2018869)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n, i, j, max1, max2, ult[5005], a[5005], b[5005], x[5005], cnt;
int main() {
f >> n;
for (i = 1; i <= n; i++)
f >> a[i], x[i] = a[i];
sort(x+1, x+n+1);
x[0] = 2e9+100;
for (i = 1; i <= n; i++)
if (x[i] != x[i-1]) cnt++;
for (i = n; i >= 1; i--) {
max1 = 0;
ult[i] = 6000;
for (j = i+1; j <= n; j++)
if (max1 < b[j] && a[i] < a[j])
max1 = b[j];
for (j = i+1; j <= n; j++)
if (max1 == b[j] && ult[j] < ult[i] && a[i] < a[j])
ult[i] = ult[j];
if (max1 == 0)
ult[i] = i;
b[i] = max1+1;
}
for (i = 1; i <= n; i++)
if (max1 < b[i])
max1 = b[i], max2 = ult[i]-i+1;
else if (max1 == b[i] && ult[i]-i+1 < max2)
max2 = ult[i]-i+1;
if (max1 == cnt)
g << max2;
else g << -1;
}