Cod sursa(job #2735500)

Utilizator MocalinnoMoca Andrei Catalin Mocalinno Data 2 aprilie 2021 14:47:45
Problema Secventa 5 Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>
using namespace std;
void DAU(const string& task = "") {
    if (!task.empty())
        freopen((task + ".in").c_str(), "r", stdin),
        freopen((task + ".out").c_str(), "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}
void PLEC() {
    exit(0);
}
#define int unsigned int
class Zaharel {
public:
    Zaharel() {}
    Zaharel(const int& _n) : n(_n), ind(0), v(_n + 1) {
        Hash.reserve(_n + 1);
        Hash.max_load_factor(0.25);
    }
    inline void Insert(const int& pos, const int& val) {
        if (!Hash.count(val))
            Hash[val] = ++ind;
        v[pos] = Hash[val];
    }
    inline long long Query(const int& st, const int& dr) {
        return Query(dr) - Query(st - 1);
    }
private:
    inline long long Query(const int& x) {
        freq = vector<int>(ind + 1);
        int i = 1, curr = 0;
        long long res = 0;
        for (int j = 1; j <= n; ++j) {
            ++freq[v[j]];
            if (freq[v[j]] == 1)
                ++curr;
            while (curr > x) {
                --freq[v[i]];
                if (!freq[v[i]])
                    --curr;
                ++i;
            }
            res += j - i + 1;
        }
        return res;
    }
    int n, ind;
    vector<int> v, freq;
    unordered_map<int, int> Hash;
};
unordered_map<int, int> Hash;
vector<int> v, freq;
int n, l, r, x;
signed main() {
    DAU("secv5");
    cin >> n >> l >> r;
    Zaharel zaharel(n);
    for (int i = 1; i <= n; ++i) {
        cin >> x;
        zaharel.Insert(i, x);
    }
    cout << zaharel.Query(l, r);
    PLEC();
}