Pagini recente » Cod sursa (job #2952828) | Cod sursa (job #571289) | Cod sursa (job #1326804) | Cod sursa (job #1792276) | Cod sursa (job #1455664)
#include <iostream>
#include <stdio.h>
using namespace std;
int v[5001];
int el[5001];
int pr[5001];
int main()
{
FILE *fin=fopen("secv.in", "r");
FILE *fout=fopen("secv.out", "w");
int n, x, p, k=0, mi=2000000000, ap=0, g;
fscanf(fin, "%d", &n);
v[0]=el[0]=pr[0]=-1;
for(int i=1; i<=n; i++){
fscanf(fin, "%d", &v[i]);
if(v[i]<mi){
mi=v[i];
ap=1;
pr[ap]=i;
}
else if(v[i]==mi)
pr[++ap]=i;
if(v[i]>el[k])
el[++k]=v[i];
else{
p=1;
while(el[p]<v[i])
p++;
if(el[p]!=v[i]){
k++;
for(int j=k; j>p; j--)
el[j]=el[j-1];
el[p]=v[i];
}
}
}
if(n==0)
fprintf(fout, "-1");
else if(k==1)
fprintf(fout, "1");
else if(k==n){
x=1;
for(int i=1; i<n && x==1; i++)
if(v[i]>v[i+1])
x=0;
if(x==1)
fprintf(fout, "%d", n);
else fprintf(fout, "-1");
}
else{
g=0;
while(ap>0){
if(n-pr[ap]+1>=k){
mi=1;
x=pr[ap];
while(mi<=k && x<=n){
if(v[x]==el[mi]){
if(v[x+1]==el[mi]){
x=n+1;
mi=0;
}
else mi++;
}
x++;
}
if(mi>k && (g==0 || x-pr[ap]<g))
g=x-pr[ap];
}
ap--;
}
if(g!=0)
fprintf(fout, "%d", g);
else fprintf(fout, "-1");
}
return 0;
}