1 条题解

  • 0
    @ 2026-3-9 9:45:43

    文字教学

    要解决这个问题,核心是判断每罐油漆是否恰好含有黄色和蓝色颜料,且不含红色颜料(绿色的混合条件)。由于数据规模大(n,m106n,m \le 10^6),我们用差分法高效处理区间更新:

    1. 为三种颜料各开一个差分数组,记录区间添加操作。
    2. 对每个颜料的差分数组计算前缀和,若前缀和 >0>0,说明该位置被添加过此颜料至少一次。
    3. 遍历所有位置,统计满足“有黄色、有蓝色、无红色”的位置数量。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1e6 + 10;
    int d1[N], d2[N], d3[N];
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n, m;
        cin >> n >> m;
        while (m--) {
            int l, r, k;
            cin >> l >> r >> k;
            if (k == 1) {
                d1[l]++;
                d1[r + 1]--;
            } else if (k == 2) {
                d2[l]++;
                d2[r + 1]--;
            } else {
                d3[l]++;
                d3[r + 1]--;
            }
        }
        int s1 = 0, s2 = 0, s3 = 0, ans = 0;
        for (int i = 1; i <= n; ++i) {
            s1 += d1[i];
            s2 += d2[i];
            s3 += d3[i];
            if (s1 > 0 && s2 > 0 && s3 == 0) ans++;
        }
        cout << ans << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    8187
    时间
    2500ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    3
    已通过
    2
    上传者