Cod sursa(job #2683276)

Utilizator loraclorac lorac lorac Data 10 decembrie 2020 19:47:46
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
typedef long long ll;
const ll lim=(1LL<<20)+5;
unordered_map<ll,ll> m;
ll v[lim],n;
ll f[lim];
ll nr(ll d)
{
    ll ans=0;
    if(d==0) return ans;
    memset(f,0,sizeof(f));
    ll cnt=0,st=1;
    for(ll dr=1;dr<=n;++dr)
    {
        if(f[v[dr]]==0)
            cnt++;
        f[v[dr]]++;
        if(cnt<=d) ans+=(dr-st+1);
        else
        {
            while(cnt>d)
            {
                f[v[st]]--;
                if(f[v[st]]==0) --cnt;
                ++st;
            }
            ans+=(dr-st+1);
        }
    }
    return ans;
}
int main()
{
    ll l,u,r=0;
    in>>n>>l>>u;
    for(ll i=1;i<=n;++i)
    {
        in>>v[i];
        if(m[v[i]]==0)
            m[v[i]]=++r,v[i]=r;
        else v[i]=m[v[i]];
    }
    m.clear();
    out<<nr(u)-nr(l-1)<<'\n';
    return 0;
}