Pagini recente » Cod sursa (job #1966246) | Cod sursa (job #1766106) | Cod sursa (job #1306998) | Cod sursa (job #1868801) | Cod sursa (job #1386426)
#include <fstream>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
int elem, minim, n, v[5001], x, val;
set <int> myset;
set <int> res[5001];
set <int> :: iterator it;
map <int, int> mymap;
void look_for(int poz){
int init=poz, j;
for(j=2; j<=elem; ++j){
//cauta in setul pentru valoarea i+1 dupa pozitia poz
it=res[j].upper_bound(poz);
if(it==res[j].end())
break;
poz=(*it);
}
if(j==elem+1)
if(minim>poz-init+1)
minim=poz-init+1;
}
int main()
{
ifstream in("secv.in");
ofstream out("secv.out");
in>>n;
for(int i=1; i<=n; ++i){
in>>v[i];
if(myset.find(v[i])==myset.end()){
myset.insert(v[i]);
elem++;
}
}
for(it=myset.begin(); it!=myset.end(); ++it){
x++;
val=(*it);
mymap.insert(pair<int, int>(val, x));
}
for(int i=1; i<=n; ++i){
v[i]=mymap[v[i]];
res[v[i]].insert(i);
}
minim=INF;
for(int i=1; i<=n; ++i){
if(v[i]==1){
look_for(i);
}
}
if(minim==INF)
minim=-1;
out<<minim<<"\n";
in.close();
out.close();
return 0;
}