Cod sursa(job #3351886)

Utilizator robert_dumitruDumitru Robert Ionut robert_dumitru Data 22 aprilie 2026 00:22:57
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <unordered_map>

using namespace std;

const int NMAX = 1048584;
int n, L, U;
unsigned int a[NMAX];
int b[NMAX];
int frU[NMAX], frL[NMAX];

void normalize() {
    std::unordered_map<unsigned int, int> mapping;
    int next_id = 1;

    for (int i = 1; i <= n; i++) {
        if (mapping.find(a[i]) == mapping.end()) {
            mapping[a[i]] = next_id++;
        }
        b[i] = mapping[a[i]];
    }
    mapping.clear();
}

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

    fin >> n >> L >> U;
    for (int i = 1; i <= n; i++) fin >> a[i];

    normalize();

    long long total = 0;
    int stU = 1, stL = 1;
    int distU = 0, distL = 0;

    for (int dr = 1; dr <= n; dr++) {
        if (frU[b[dr]] == 0) distU++;
        frU[b[dr]]++;
        while (distU > U) {
            frU[b[stU]]--;
            if (frU[b[stU]] == 0) distU--;
            stU++;
        }

        if (frL[b[dr]] == 0) distL++;
        frL[b[dr]]++;
        while (distL > L - 1) {
            frL[b[stL]]--;
            if (frL[b[stL]] == 0) distL--;
            stL++;
        }

        if (distU >= L) {
            total += (stL - stU);
        }
    }

    fout << total << "\n";
    return 0;
}