Pagini recente » Cod sursa (job #849116) | Cod sursa (job #3221463) | Cod sursa (job #135292) | Cod sursa (job #700680) | Cod sursa (job #2524359)
#include <iostream>
#include<fstream>
#include<algorithm>
#define N 5005
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int n;
int a[N];
int k;
int dist[N];//elem distincte din vector ordonate crescator
int mini=2000000000;
void read()
{
int i,j;
fin>>n;
for(i=1;i<=n;++i)
{
fin>>a[i];
dist[i]=a[i];
}
}
int pivotare(int s,int d)
{
int i=s,j=d;
int pasi=0,pasj=1;
int p=s+rand()%(d-s+1);
int aux=dist[s];dist[s]=dist[p];dist[p]=aux;
while(i<j)
{
if(dist[i]>dist[j])
{
swap(dist[i],dist[j]);
swap(pasi,pasj);
}
i+=pasi;
j-=pasj;
}
return i;
}
void qs(int s,int d)
{
if(s<d)
{
int p=pivotare(s,d);
qs(s,p-1);
qs(p+1,d);
}
}
void solve()
{
int i,x,j;
bool gasit=false;
qs(1,n);//sortam dist
///pastram in dist doar elem distincte
k=1;
for(i=2;i<=n;++i)
if(dist[i]!=dist[i-1])
dist[++k]=dist[i];
//for(i=1;i<=k;++i)cout<<dist[i]<<" ";
for(i=1;i<=n;++i)//de unde poate incepe secv ceruta
{
x=1;//elem pe care il caut in dist
for(j=i;j<=n;++j)
if(dist[x]==a[j])
{
x++;
if(x==k+1)//le am gasit pe toate
{
gasit=true;
mini=min(mini,j-i+1);
}
}
}
if(gasit==false)fout<<-1;
else fout<<mini;
}
int main()
{
int i;
read();
solve();
return 0;
}