Pagini recente » Cod sursa (job #2667430) | Cod sursa (job #619832) | Cod sursa (job #2673343) | Cod sursa (job #3283603) | Cod sursa (job #2274692)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <set>
#include <vector>
#define maxn 5005
using namespace std;
int N;
int v[maxn];
int best[maxn];
int pos[maxn];
int nr_diff = 0;
set <int> aparitii;
vector <int> siruri;
int main()
{
ifstream in ("secv.in");
ofstream out ("secv.out");
int lgmin = 0x7fffffff;
//cout<<lgmin;
in>>N;
for(int i = 1; i <= N; ++i)
{
in>>v[i];
//cout<<v[i]<<" ";
if(aparitii.find(v[i]) == aparitii.end())
{
++nr_diff;
aparitii.insert(v[i]);
}
}
//cout<<"\nSALAM\n";
for(int i = 0; i <= N; ++i)
{
best[i] = 1;
pos[i] = -1;
}
for(int i = N - 1; i > 0; --i)
{
for(int j = i + 1; j <= N; ++j)
if(v[i] < v[j] && best[i]<best[j]+1)
{
best[i] = best[j] + 1;
pos[i] = j;
if(best[i] == nr_diff)
{
siruri.push_back(i);
//cout<<i<<"\n";
}
}
}
if(siruri.empty())
{
out<<"-1\n";
return 0;
}
for(int i = 0; i < siruri.size(); ++i)
{
int capat = siruri[i];
while(1)
{
//cout<<capat<<"\n";
if(pos[capat] != -1)
capat = pos[capat];
else
break;
}
;
if(capat - siruri[i] < lgmin)
lgmin = capat - siruri[i];
}
out<<lgmin + 1<<"\n";
return 0;
}