Pagini recente » Cod sursa (job #2175649) | Cod sursa (job #3186107) | Cod sursa (job #1436518) | Cod sursa (job #2497313) | Cod sursa (job #908863)
Cod sursa(job #908863)
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *f=fopen("secv.in","r");
FILE *g=fopen("secv.out","w");
struct nod
{
int x;
int y;
}a[5005];
int v[5005],n,nr,i,poz,r,c[5005],ct;
int caut(int x)
{
int p,m,u,mx;
mx=0;
p=1;
u=nr;
while (p<=u)
{
m=(p+u)/2;
if(a[m].x<x)
{
if(m>mx)mx=m;
p=m+1;
}
else if (a[m].x==x)return -1;
else u=m-1;
}
return mx;
}
int main()
{
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
c[i]=v[i];
}
stable_sort(c+1,c+n+1);
for(i=1;i<=n;i++)
if (c[i]!=c[i-1])ct++;
nr=1;
a[1].x=v[1];
for(i=2;i<=n;i++)
{
poz=caut(v[i]);
if (poz==nr)
{
nr++;
a[nr].x=v[i];
a[nr].y=i;
}
else if (poz!=-1){a[poz+1].x=v[i];a[poz+1].y=i;}
}
r=a[nr].y-a[1].y+1;
if (nr==ct)fprintf(g,"%d",r);
else fprintf(f,"%d",-1);
fclose(g);
return 0;
}