Pagini recente » Cod sursa (job #1745918) | Cod sursa (job #894930) | Cod sursa (job #1937863) | Cod sursa (job #1183192) | Cod sursa (job #764545)
Cod sursa(job #764545)
#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 Best[MaxN],B[MaxN],Poz[MaxN],SolV[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++)
SolV[i] = INF;
for(int i=1;i<=N;i++)
{
if(A[i].poz == 1)
Best[1] = 1, Poz[1] = i, SolV[1] = 1;
else if(Best[A[i].poz] < Best[A[i].poz-1]+1 || (Best[A[i].poz] == Best[A[i].poz-1]+1 && SolV[A[i].poz] > i-Poz[A[i].poz-1]+1))
Best[A[i].poz] = Best[A[i].poz-1]+1, Poz[A[i].poz] = Poz[A[i].poz-1], SolV[A[i].poz] = i-Poz[A[i].poz]+1;
else
Best[1] = 1, Poz[1] = i, SolV[1] = 1;
//printf("%d %d %d\n",Best[A[i].poz],Poz[A[i].poz],SolV[A[i].poz]);
}
Sol = SolV[Nr];
if(Sol == INF)
Sol = -1;
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
}