Cod sursa(job #2310661)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 1 ianuarie 2019 20:32:11
Problema Secv Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 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 start=poz[1][0];
    int ant=poz[1][0];
    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;
        }
        ant=poz[i][st];
    }
    printf("%d\n",ant-start+1);
    return 0;
}