这对于这道题很多人可能都没搞懂怎么用前缀和解决,其实我们可以用3个数组分别记录红黄蓝三种颜色,但他只问绿色,所以最后在统计仅有黄蓝的桶数就行了。
话不多说直接上代码。
#include <bits/stdc++.h>
using namespace std;
int y[1000005];
int b[1000005];
int r[1000005];
int main(){
int n,m;
cin >> n >> m;
y[0]=0,b[0]=0,r[0]=0;
for(int i=1;i<=m;i++){
int x1,y1,z1;//分别数入区间,颜色
cin >> x1 >> y1 >> z1;
if(z1 == 1){//代表黄色
y[x1] ++;
y[y1+1] --;
}
else if(z1 == 2){//代表蓝色
b[x1] ++;
b[y1+1] --;
}
else{//代表红色
r[x1] ++;
r[y1+1] --;
}
}
for(int i=1;i<=n;i++){//统计前缀和
y[i] = y[i-1] + y[i];
b[i] = b[i-1] + b[i];
r[i] = r[i-1] + r[i];
}
int cnt=0;
for(int i=1;i<=n;i++){//寻找绿色颜料桶
if(y[i] > 0 && b[i] > 0 && r[i] <= 0){
cnt++;
}
}
cout << cnt;
return 0;
}