Cod sursa(job #3268138)

Utilizator Barbu_MateiBarbu Matei Barbu_Matei Data 13 ianuarie 2025 18:58:51
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;

int n, l, u;
pair<unsigned int, int> v[(1 << 20) + 1];
int cv[(1 << 20) + 1], mt[(1 << 20) + 1];

long long sum(long long k) {
    return k * (k + 1) / 2;
}

long long calcSeq(int len) {
    int st = 1, cvSize = 0;
    long long sol = 0;
    memset(mt, 0, sizeof(mt));
    for (int dr = 1; dr <= n; ++dr) {
        ++mt[cv[dr]];
        if (mt[cv[dr]] == 1) {
            ++cvSize;
        }
        while (cvSize > len) {
            --mt[cv[st]];
            if (mt[cv[st]] == 0) {
                --cvSize;
            }
            ++st;
        }
        sol += dr - st + 1;
    }
    return sol;
}

int main() {
    ifstream cin("secv5.in");
    ofstream cout("secv5.out");
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> l >> u;
    for (int i = 1; i <= n; ++i) {
        cin >> v[i].first;
        v[i].second = i;
    }
    sort(v + 1, v + n + 1);
    int k = 0;
    for (int i = 1; i <= n; ++i) {
        if (v[i].first != v[i - 1].first) {
            ++k;
        }
        cv[v[i].second] = k;
    }
    cout << calcSeq(u) - calcSeq(l - 1);
}