Cod sursa(job #2691623)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 29 decembrie 2020 14:09:56
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
const long long LIM = (1LL << 20) + 5;
unordered_map<long long, long long> m;
long long n, l, u, r, v[LIM], f[LIM];
long long func(long long d)
{
    long long ans = 0;
    if (d == 0)
        return ans;
    memset(f,0,sizeof(f));
    long long cnt = 0, st = 1;
    for (long long 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() {
    freopen("secv5.in", "r", stdin);
    freopen("secv5.out", "w", stdout);

    scanf("%lld%lld%lld", &n, &l, &u);
    for (long long i=1;i<=n;i++){
        scanf("%lld", &v[i]);
        if (m[v[i]] == 0)
            m[v[i]] = ++r, v[i] = r;
        else
            v[i] = m[v[i]];
    }
    m.clear();
    printf("%lld\n", func(u)-func(l-1));
    return 0;
}