题解 | 染色
染色
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")