Pagini recente » Cod sursa (job #994581) | Cod sursa (job #2684922) | Cod sursa (job #2780627) | Cod sursa (job #3176815) | Cod sursa (job #300575)
Cod sursa(job #300575)
#include <algorithm>
#define DIM 5005
#define INF 1<<31-1
using namespace std;
struct secv {int v,x,ap,in;} a[DIM];
int n,mins;
void read ()
{
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
{
scanf ("%d",&a[i].v);
a[i].in=i;
}
}
int cmp (secv a,secv b)
{
return a.v<b.v;
}
void solve ()
{
int i,j,last;
for (i=1; i<=n; ++i)
if (a[i].v>a[1].v)
break;
else
a[i].ap=a[i].x=1;
last=i-1;
for ( ; i<=n; ++i)
{
a[i].x=INF;
for (j=last; a[j].v==a[last].v; --j)
if (a[i].in>a[j].in && a[j].ap)
{
a[i].ap=1;
if (a[i].in-a[j].in+a[j].x<a[i].x)
a[i].x=a[i].in-a[j].in+a[j].x;
}
if (a[i].x==INF)
a[i].x=-1;
if (a[i+1].v>a[i].v)
last=i;
}
for (i=n, mins=INF; a[i].v!=a[last].v; --i)
if (a[i].ap && a[i].x<mins)
mins=a[i].x;
printf ("%d",mins==INF?-1:mins);
}
int main ()
{
freopen ("secv.in","r",stdin);
freopen ("secv.out","w",stdout);
read ();
if (n==1)
{
printf ("1");
}
else
{
sort (a+1,a+n+1,cmp);
solve ();
}
return 0;
}