Cod sursa(job #3262628)

Utilizator AlexPlesescuAlexPlesescu AlexPlesescu Data 10 decembrie 2024 22:39:37
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
#define int long long int
#define pb push_back
#define sz(x) (int)(x.size())
const int N = (1 << 20) + 5;

int n, l, u, v[N];

int calc(int lg) {
    unordered_map<int, int> m;
    deque<int> deq;
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        m[v[i]]++;
        deq.push_back(i);
        while (sz(m) > lg) {
            m[v[deq.front()]]--;
            if (m[v[deq.front()]] == 0) {
                m.erase(v[deq.front()]);
            }
            deq.pop_front();
        }
        if (deq.empty()) {
            ans += 0;
        } else {
            ans += i - deq.front() + 1;
        }
    }
    return ans;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    freopen("secv5.in", "r", stdin);
    freopen("secv5.out", "w", stdout);
    cin >> n >> l >> u;
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
    }
    cout << calc(u) - calc(l - 1);
}