Cod sursa(job #3350042)

Utilizator iLaurianLaurian Iacob iLaurian Data 4 aprilie 2026 23:48:49
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <algorithm>
#include <fstream>
#include <vector>

std::ifstream f ("secv5.in");
std::ofstream g ("secv5.out");

int n, l, u, answer;
int fr[1050000];

int main() {
    f >> n >> l >> u;
    std::vector<int> v;
    for (int i = 0; i < n; i++) {
        int x; f >> x;
        v.push_back(x);
    }

    std::vector<int> aux = v;
    std::ranges::sort(aux);
    aux.erase(std::ranges::unique(aux).begin(), aux.end());

    for (int i = 0; i < n; i++) {
        v[i] = static_cast<int>(std::ranges::lower_bound(aux, v[i]) - aux.begin());
    }

    int left = 0, right = 0, distinct = 0;
    while (left < n - l + 1) {
        if (fr[v[right]] == 0) {
            distinct++;
        }
        fr[v[right]]++;
        if (distinct >= l && distinct <= u) {
            answer++;
        }
        if (distinct > u) {
            while (distinct > u) {
                fr[v[left]]--;
                if (fr[v[left]] == 0) {
                    distinct--;
                }
                left++;
            }
            right = left;
        }
        right++;
        if (right == n) {
            left++;
            right = left;
            distinct = 0;
            std::fill_n(fr, 1050000, 0);
        }
    }

    g << answer << "\n";

    return 0;
}