Cod sursa(job #2885105)

Utilizator CharacterMeCharacter Me CharacterMe Data 5 aprilie 2022 15:26:40
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

std::ifstream fin("secv5.in");
std::ofstream fout("secv5.out");

int main() {

    int n, l, u;
    fin >> n >> l >> u;

    std::vector<unsigned> vals(n);
    for (auto &it:vals) {
        fin >> it;
    }

    int lft = 0, rgtl = -1, rgtu = -1;

    std::unordered_map<unsigned, int> mapl;
    std::unordered_map<unsigned, int> mapu;

    long long unsigned sol = 0LL;

    while (lft < n) {
        while (rgtl < n - 1 && mapl.size() < l) {
            ++mapl[vals[++rgtl]];
        }

        if (mapl.size() < l) {
            break;
        }

        while (rgtu < n - 1 && mapu.size() <= u) {
            ++mapu[vals[++rgtu]];
        }

        sol += 1LL * (rgtu - rgtl + (mapu.size() <= u));

        if (lft < n) {
            if (--mapl[vals[lft]] == 0) {
                mapl.erase(vals[lft]);
            }
            if (--mapu[vals[lft]] == 0) {
                mapu.erase(vals[lft]);
            }
        }
        ++lft;
    }

    fout << sol;

    return 0;
}