Cod sursa(job #587498)

Utilizator Smaug-Andrei C. Smaug- Data 4 mai 2011 23:38:57
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstdlib>
#include <string>

#define INF 10000

int cmp(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, S[5010], T[5010], D[5010], L[5010], i, j, k, min;

  scanf("%d", &N);
  for(i=0; i<N; i++)
    scanf("%d", S+i);

  memcpy(T, S, sizeof(S));
  qsort(T, N, sizeof(int), cmp);

  j=0;
  for(i=0; i<N; i++)
    if(T[i]!=T[j])
      T[++j]=T[i];
  
  memset(D, -1, sizeof(D));
  memset(L,  0, sizeof(L));
  
  min=INF;
  for(i=0; i<N; i++){
    if(S[i]==T[0])
      D[i]=0;
    if(D[i]!=-1){
      for(k=i+1; k<N && T[D[i]+1]!=S[k]; k++)
	;
      if(k<N){
	D[k]=D[i]+1;
	L[k]=L[i]+k-i;
	if(D[k]==j){
	  D[k]=-1;
	  min=(L[k]<min)? L[k]: min;
	}
      }
    }
  }
	  
  printf("%d\n", (min==INF)? -1: min+1);

  return 0;

}