1 solutions

  • 1
    @ 2023-10-15 12:36:13

    想通了就是水题

    仔细读完题的你,就会发现这是一道在区间内修改值并在最后查询某一个值的数量的题目

    看到加粗的东西了吗?

    想到用差分来做了吗?

    其实只需要分别储存三原色的差分数组最后查询有多少个值是有黄色、有蓝色,但没有红色的就行了。

    AC 奉上

    #include <iostream>
    
    using namespace std;
    int n, m; // Times
    int c[4][1000005], a[4][1000005]; // ColorData
    int l, r, k; // Every Times
    int ans; // Answer
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= m; i++) {
            cin >> l >> r >> k;
            c[k][l]++;
            c[k][r + 1]--;
        }
        for (int i = 1; i <= n; i++) {
            a[1][i] = a[1][i - 1] + c[1][i];
            a[2][i] = a[2][i - 1] + c[2][i];
            a[3][i] = a[3][i - 1] + c[3][i];
            if (a[1][i] > 0 && a[2][i] > 0 && a[3][i] == 0) {
                ans++;
            }
        }
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    Information

    ID
    8318
    Time
    2500ms
    Memory
    256MiB
    Difficulty
    2
    Tags
    # Submissions
    3
    Accepted
    3
    Uploaded By