Cod sursa(job #2310663)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 1 ianuarie 2019 20:40:39
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
int v[5005];
int val[5005];
vector<int>poz[5005];
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n,i,nr,cnt=0;
    scanf("%d",&n);
    map<int,int>mp;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        if(mp.find(v[i])==mp.end())
            mp[v[i]]=1,val[++cnt]=v[i];
    }
    sort(val+1,val+cnt+1);
    for(i=1;i<=cnt;i++)
        mp[val[i]]=i;
    for(i=1;i<=n;i++)
        {v[i]=mp[v[i]];poz[v[i]].push_back(i);}int min1=n+1;
        for(int w=0;w<poz[1].size();w++)
   {
    int start=poz[1][w];
    int ant=poz[1][w];
    for(i=2;i<=cnt;i++)
    {
        int st=0,dr=poz[i].size()-1;
        while(st<=dr)
        {
            int med=(st+dr)/2;
            if(ant>poz[i][med])st=med+1;
            else
                dr=med-1;
        }
        if(st==poz[i].size()){ant=2*n;break;}
        ant=poz[i][st];
    }
    if(min1>(ant-start+1))min1=ant-start+1;
   }
   if(min1==n+1)min1=-1;
    printf("%d\n",min1);
    return 0;
}