Pagini recente » Cod sursa (job #2133112) | Cod sursa (job #2435717) | Cod sursa (job #1231729) | Cod sursa (job #2369681) | Cod sursa (job #764605)
Cod sursa(job #764605)
#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];
//printf("%d -> %d\n",A[i].poz,Poz[A[i].poz]);
if(A[i].poz == Nr && Poz[A[i].poz] && 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);
}