Pagini recente » Cod sursa (job #1791025) | Cod sursa (job #2558848) | Cod sursa (job #1765971) | Cod sursa (job #1630317) | Cod sursa (job #1736821)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
const int MAXN = 5e3+5;
int n, v[MAXN], dim[MAXN], start = 1, stop, elemCurr, elemInit;
int miny = ~(1<<31), maxy;
map <int, int> mapa;
int main()
{
fin>>n;
stop = n;
for(int i=1; i<=n; i++)
{
fin>>v[i];
miny = min(miny, v[i]);
maxy = max(maxy, v[i]);
if(!mapa[v[i]]) elemInit++;
mapa[v[i]]++;
}
elemCurr = elemInit;
while(elemCurr == elemInit)
{
if(mapa[v[start]] == 1) break;
mapa[v[start++]]--;
}
while(elemCurr == elemInit)
{
if(mapa[v[stop]] == 1) break;
mapa[v[stop--]]--;
}
while(v[stop] != maxy && stop<=n) stop--;
while(v[start] != miny && start>=1) start--;
if(v[start]!= miny || v[stop]!=maxy)
{
fout<<-1;
exit(0);
}
for(int i=stop; i>=start; i--)
{
int maxyy = 0;
for(int j=i+1; j<=stop; j++)
{
if(v[i] < v[j]) maxyy = max(maxyy, dim[j]);
}
dim[i] = maxyy + 1;
}
for(int i=stop; i>=start; i--)
if(dim[i] == elemInit)
{
fout<<stop-start+1;
exit(0);
}
fout<<-1;
}