Pagini recente » Cod sursa (job #255439) | Cod sursa (job #3250117) | Cod sursa (job #105136) | Cod sursa (job #1301269) | Cod sursa (job #2776346)
#include <fstream>
#include <set>
using namespace std;
ifstream cin("secv.in");
ofstream cout("secv.out");
int v[5005], urm[5005], l[5005];
set <int> s;
void simul(int &st, int &dr, int poz)
{
st = poz;
while (poz)
{
dr = poz;
poz = urm[poz];
}
}
int main()
{
int n, poz, first, last, i, j;
first = last = -1;
cin >> n;
if (n == 0)
{
cout << -1;
return 0;
}
for (i = 1; i <= n; i++)
{
cin >> v[i];
s.insert(v[i]);
}
urm[n] = 0;
l[n] = 1;
for (i = n - 1; i >= 0; i--)
{
urm[i] = 0;
l[i] = 1;
for (j = i + 1; j <= n; j++)
if (v[i] < v[j])
if (l[i] < l[j] + 1)
{
l[i] = l[j] + 1;
urm [i] = j;
}
}
bool ok = 1;
for (i = 1; i <= n; i++)
if (l[i] == s.size())
{
ok = 0;
int st, dr;
simul(st, dr, i);
if (first == -1)
{
first = st;
last = dr;
}
else if (last - first > dr - st)
{
first = st;
last = dr;
}
}
if (ok)
{
cout << -1;
return 0;
}
cout << last - first + 1;
}