Cod sursa(job #1047574)

Utilizator hevelebalazshevele balazs hevelebalazs Data 4 decembrie 2013 18:29:00
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define MOD 65537
#define N 5000
int H[MOD];
int a[N],b[N];
void push(int x){
    int i=x%MOD;
    while(H[i]&&H[i]!=x)i=(i+1)%MOD;
    H[i]=x;
    }
bool get(int x){
    int i=x%MOD;
    while(H[i]&&H[i]!=x)i=(i+1)%MOD;
    return H[i];
    }
int c(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,B=0,m=-1;
    scanf("%i",&n);
    fr(i,0,n){
        scanf("%i",a+i);
        ++a[i];
        if(!get(a[i])) b[B++]=a[i],push(a[i]);
        }
    qsort(b,B,sizeof(int),c);
    int j=0;
    fr(i,0,n){
        if(a[i]==b[j]){
            if(++j==B){
                //search back
                int k=i;
                while(j){
                    if(a[k]==b[j-1]) --j;
                    --k;
                    }
                if(m==-1||m>i-k)m=i-k;
                i=k+1;
                }
            }
        }
    printf("%i",m);
    return 0;
    }