B. Karen and Coffee

https://codeforces.com/problemset/problem/816/B

题意:给定n个区间,每次将n个区间中的所有数值统计一次,还有数值k,和q个询问区间。问每次询问的区间中,有多少个数值出现统计的次数>=k次。

思路:差分+前缀和,求出每个数出现的次数。再将所有出现次数>=k的数进行标记,再求前缀和,然后回答q个询问即可。

inline void solve(){
    int n, k, q;
    cin >> n >> k >> q;

    vector<int> a(233333, 0);
    for (int i = 0; i < n; ++i) {
        int l, r;
        cin >> l >> r;
        a[l] ++;
        a[r + 1] --;
    }

    vector<int> b(a.size(), 0);
    for (int i = 1; i <= 200000; ++i) {
        a[i] += a[i - 1];
        if (a[i] >= k) {
            b[i] = 1;
        }
    }

    for (int i = 1; i <= 200000; ++i) {
        b[i] += b[i - 1];
    }

    while (q --) {
        int l, r;
        cin >> l >> r;
        cout << (b[r] - b[l - 1]) << "\n";
    }
}
posted @ 2025-02-21 17:02  _Yxc  阅读(3)  评论(0编辑  收藏  举报