Cod sursa(job #631626)

Utilizator sebii_cSebastian Claici sebii_c Data 9 noiembrie 2011 01:20:41
Problema Secv Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5002
#define INF 0x3f3f3f3f

int compare(const void *a, const void *b)
{
    return (*(int *)a - *(int *)b);
}

int main()
{
    freopen("secv.in", "r", stdin);
    freopen("secv.out", "w", stdout);
    int n, i, j, min = INF;
    int A[NMAX], B[NMAX];

    scanf("%d", &n);
    for (i=0; i<n; ++i) {
	scanf("%d", &A[i]);
	B[i] = A[i];
    }
    qsort(B, n, sizeof(int), compare);
    
    int nr = 0, len;
    for (i=1; i<n; ++i)
	if (B[i] != B[i-1])
	    B[++nr] = B[i];
    
    int k=0;
    for (i=0; i<n; ++i) {
	k = 0;
	for (j=i; j<n; ++j)
	    if (A[j] == B[k]) {
		++k;
		if (k == nr+1) {
		    len = j-i+1;
		    break;
		}
	    }
	if (k == nr+1 && len < min) {
	    min = len;
	}
    }
    
    printf("%d\n", (min == INF) ? -1 : min);
    return 0;
}