Cod sursa(job #238105)

Utilizator razyelxrazyelx razyelx Data 31 decembrie 2008 16:43:02
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
FILE*in = fopen("secventa.in","r");
FILE*out= fopen("secventa.out","w");

long long s[5001],x[5001];

void divizeaza(int s, int d, int &m){m=(s+d)/2;}
void interclaseaza(int s, int d, int m, long long x[5001]){
	int i=s,j=m+1,k=1;
	int v[5001];
	while(i<=m && j<=d){
		if(x[i]<x[j]){v[k]=x[i];i++;}
		else
		     if(x[i]>x[j]){v[k]=x[j];j++;}
		k++;
	}
	if(i<=m) while(i<=m){v[k]=x[i];i++;k++;}
	else while(j<=d){v[k]=x[j];j++;k++;}

	for(k=1,i=s;i<=d;k++,i++){
		x[i]=v[k];
	}
}
void mergesort(int s,int d, long long x[5001]){
	int m;
	if(s<d){
		divizeaza(s,d,m);
		mergesort(s,m,x);
		mergesort(m+1,d,x);
		interclaseaza(s,d,m,x);
	}
}

int main(){
    int n,i,j,k=0,ok,inc,sfr,min=5001;

    fscanf(in,"%d",&n);

    for(i=1;i<=n;i++){


       fscanf(in,"%d",&x[i]);



       ok=1;
       for(j=1;j<=k && ok;j++)
	  if(s[j] == x[i])ok = 0;



       if(ok){
	 k++;
	 s[k] = x[i];
       }


    }

    mergesort(1,k,s);

    inc=0;sfr=n;i=1;

    while(i<=k){

       ok=1;

       if(i == 1){

	 for(j=inc+1;j<=n && ok;j++)
	    if(x[j] == s[i])ok=0;

	 if(!ok){inc = j-1;i++;}
	 else break;

	 continue;
       }


       if(i == k){
	 for(;j<=n && ok;j++)
	    if(x[j] == s[i])ok=0;

	    if(!ok){

	      i=1;
	      if(min>sfr-inc+1){min = sfr-inc+1;sfr = j-1;}
	    }else i=1;

	 continue;
       }

       for(;j<=n && ok;j++)
	  if(x[j] == s[i])ok = 0;

       if(!ok)i++;
       else i=1;

    }

    fprintf(out,"%d",min);

    return 0;
}