Pagini recente » Cod sursa (job #1576919) | Cod sursa (job #393080) | Cod sursa (job #181215) | Cod sursa (job #1954400) | Cod sursa (job #368148)
Cod sursa(job #368148)
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define N 5001
int sir[N];
int sir2[N];
int sir3[N];
int cost[N];
void sort(int st,int dr)
{int i;
int s=st,d=dr,aux,p=sir2[st+rand()%(dr-st+1)];
while(s<d)
{while(sir2[s]<p)s++;
while(sir2[d]>p)d--;
if(s<=d)
{aux=sir2[s];sir2[s]=sir2[d];sir2[d]=aux;
s++;
d--;
}
}
if(s<dr)sort(s,dr);
if(st<d)sort(st,d);
}
int main ()
{freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int n,i,j,k,vf,st,dr,mij;
scanf("%d",&n);
for (i=1;i<=n;i++)
{scanf("%d",&sir[i]);
}
memcpy(sir2,sir,sizeof(*sir)*(n+1));
sort(1,n);
vf=1;
for (i=2;i<=n;i++)
{if(sir2[vf]!=sir2[i])
{sir2[vf+1]=sir2[i];
vf++;
}
}
for (i=1;i<=n;i++)
{for (j=1;j<=vf;j++)
{if(sir[i]==sir2[j])
{sir3[i]=j;
break;
}
}
}
for (i=1;i<=n;i++)
{if(sir3[i]==1)cost[i]=i;
}
for (i=2;i<=n;i++)
{for (j=i-1;j>=1;j--)
{if(sir3[i]==sir3[j]+1)
{cost[i]=cost[j];
break;
}
}
}
int min=123456789;
for (i=1;i<=n;i++)
{if(sir3[i]==vf)
{if(min>i-cost[i]+1)
{min=i-cost[i]+1;
}
}
}
if(min==123456789)
{printf("-1");
}
else
{printf("%d",min);
}
return 0;
}