Cod sursa(job #1754031)

Utilizator giotoPopescu Ioan gioto Data 7 septembrie 2016 14:37:19
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstring>
#include <algorithm>
#define DIM 5005
using namespace std;

int n,nr,m,Min,Max;
int a[DIM],b[DIM],t[DIM];
int main(){
    freopen("secv.in", "r", stdin);
    freopen("secv.out", "w", stdout);
    scanf("%d", &n);
    for(int i=1;i<=n;++i)
        scanf("%d", &a[i]),b[i]=a[i];
    sort(b+1,b+n+1);b[0]=-1;
    for(int i=1;i<=n;++i)
        if(b[i]==b[i-1]) t[i]=nr;
                    else t[i]=++nr;
    Max=-DIM;
    for(int i=1;i<=n;++i){
        int mid,st=1,dr=n;
        while(st<=dr){
            mid=(st+dr)/2;
            if(b[mid]==a[i])
                break;
            else if(b[mid]>a[i])
                dr=mid-1;
            else
                st=mid+1;
        }
        a[i]=t[mid];
        if(a[i]>Max)
            Max=a[i];
    }Min=DIM;
    for(int i=0;i<=DIM;++i)
        b[i]=0;
    for(int i=1;i<=n;++i){
        if(a[i]==1)
            b[1]=i;
        else if(b[a[i]-1]!=0)
            b[a[i]]=b[a[i]-1];
        if(a[i]==Max&&i-b[a[i]]+1<Min&&b[a[i]]!=0)
            Min=i-b[a[i]]+1;
    }
    if(Min==DIM)
    {printf("-1");return 0;}
    printf("%d", Min);
    return 0;
}