Pagini recente » Monitorul de evaluare | Cod sursa (job #717720) | Cod sursa (job #149328) | Cod sursa (job #1862598) | Cod sursa (job #1847557)
#include <cstdio>
#include <stack>
#include <algorithm>
using namespace std;
const int NMAX=5000;
struct ELEM
{
int val,poz;
};
int v[NMAX+5];
ELEM s[NMAX+5];
bool cmp(ELEM a,ELEM b)
{
if(a.val==b.val)
return a.poz<b.poz;
return a.val<b.val;
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int i,n,x;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",v+i);
s[i].val=v[i];
s[i].poz=i;
}
sort(s+1,s+n+1,cmp);
int t=-1,tpoz=0;
for(i=1;i<=n;++i)
{
if(t==s[i].val)
{
v[s[i].poz]=tpoz;
}
else
{
tpoz++;
t=s[i].val;
v[s[i].poz]=tpoz;
}
}
int sol=n+1,max=tpoz+1,st,next=0;
tpoz=1;
for(i=1;i<=n;++i)
{
if(tpoz==2 && v[i]==1 && next==0)
{
next=i;
}
if(v[i]==tpoz)
{
tpoz++;
if(v[i]==1)
st=i;
}
if(tpoz==max)
{
if(sol>i-st+1)
{
sol=i-st+1;
}
tpoz=2;
if(next!=0)
{
i=next;
next=0;
}
}
}
if(sol<=n)
printf("%d\n",sol);
else
printf("-1\n");
return 0;
}