Cod sursa(job #3355868)

Utilizator PedroLuisNegoita Luis PedroLuis Data 27 mai 2026 01:19:46
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

void comp(vector<int>& v) {
    int n = v.size();
    vector<pair<int, int>> p(n);
    for (int i = 0; i < n; ++i) {
        p[i] = {v[i], i};
    }

    sort(p.begin(), p.end());

    int id = 0;
    if (n > 0) {
        v[p[0].second] = 0;
    }

    for (int i = 1; i < n; ++i) {
        if (p[i].first != p[i - 1].first) {
            id++;
        }
        v[p[i].second] = id;
    }
}

long long calc(const vector<int>& v, int k, int n) {
    if (k <= 0) return 0;

    long long raspuns = 0;
    int stanga = 0;
    int diferite = 0;
    vector<int> fr(n + 1, 0);

    for (int dreapta = 0; dreapta < n; ++dreapta) {
        if (fr[v[dreapta]] == 0) {
            diferite++;
        }
        fr[v[dreapta]]++;

        while (diferite > k) {
            fr[v[stanga]]--;
            if (fr[v[stanga]] == 0) {
                diferite--;
            }
            stanga++;
        }

        raspuns += (dreapta - stanga + 1);
    }

    return raspuns;
}

int main() {
    ifstream fin("secv5.in");
    ofstream fout("secv5.out");

    int n, l, u;
    if (!(fin >> n >> l >> u)) return 0;

    vector<int> v(n);
    for (int i = 0; i < n; ++i) {
        fin >> v[i];
    }

    comp(v);

    long long sus = calc(v, u, n);
    long long jos = calc(v, l - 1, n);
    
    fout << sus - jos << "\n";
    
    return 0;
}