Pagini recente » Cod sursa (job #1816470) | Cod sursa (job #1466848) | Cod sursa (job #528768) | Cod sursa (job #1298738) | Cod sursa (job #764597)
Cod sursa(job #764597)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *f = fopen("secv.in","r");
FILE *g = fopen("secv.out","w");
typedef struct
{
int info,poz;
} numar;
typedef struct Compare
{
bool operator () (const numar a,const numar b) { return a.info < b.info ; }
} ICompare;
#define MaxN 5010
#define INF 9000000
int N,Nr,Max,Sol = INF,poz;
numar A[MaxN];
int Poz[MaxN];
void citire(void)
{
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d ",&A[i].info);
}
void NumereUnice(void)
{
numar C[MaxN];
C[0].info = -1;
for(int i=1;i<=N;i++)
C[i].info = A[i].info,C[i].poz = i;
sort(C+1,C+N+1,ICompare());
for(int i=1;i<=N;i++)
{
if(C[i].info != C[i-1].info)
++ Nr;
A[C[i].poz].poz = Nr;
}
}
void Rezolvare(void)
{
NumereUnice();
for(int i=1;i<=N;i++)
{
if(A[i].poz == 1)
Poz[1] = i;
else if(Poz[A[i].poz] < Poz[A[i].poz-1])
Poz[A[i].poz] = Poz[A[i].poz-1];
if(A[i].poz == Nr && Sol > i-Poz[A[i].poz]+1)
Sol = i-Poz[A[i].poz]+1;
}
if(Sol == INF)
Sol = -1;
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
}