题解 | 染色

染色

https://www.nowcoder.com/practice/fb48f6284a0f4e198f0bf2a988f703f8

#include <iostream>
using namespace std;
#include<vector>
#define int long long 
#define N 2e5
//使用三个数组 记录黄蓝红 最后下标对应
//涉及多次修改 使用差分数组 
signed main() {
    int n,m;
    cin>>n>>m;
    //统计黄蓝红的三个数组  下标对应
    vector<int>count_yellow(N);
    vector<int>count_blue(N);
    vector<int>count_red(N);
    //使用差分数组 记录修改
    vector<int>diff_yellow(N);
    vector<int>diff_blue(N);
    vector<int>diff_red(N);
    //构建差分数组
    while(m--){
       int l,r,k;
       cin>>l>>r>>k;
       if(k==1){
          diff_yellow[l]++;
          diff_yellow[r+1]--;
       }
       else if(k==2){
          diff_blue[l]++;
          diff_blue[r+1]--;
       }
       else if(k==3){
           diff_red[l]++;
           diff_red[r+1]--;
       }
    }
    //对差分进行前缀和 
    for(int i=1;i<=n;i++){
       count_yellow[i]=count_yellow[i-1]+diff_yellow[i];
       count_blue[i]=count_blue[i-1]+diff_blue[i];
       count_red[i]=count_red[i-1]+diff_red[i];
    }
    int sum_green=0;
    for(int i=1;i<=n;i++){
        if(count_yellow[i]>0&&count_blue[i]>0&&count_red[i]==0){
            sum_green++;
        }
    }
    cout<<sum_green;

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务