思路
很显然这题并不需要用到线段树。我们只需要运用差分就行了(显而易见先涂色后查询)。前缀和的逆。
我们设置 三个数组代表红色,蓝色和黄色,并用差分修改求出每一个栅栏刷三种油漆的次数,最后求出满足 且 且 的个数即可。
代码
//定义数组
int n,m,r[1000005],y[1000005],b[1000005],ans = 0;
int main() {
n = read(),m = read();
while(m--) {
int l = read(),rr = read(),k = read();
//差分
if(k == 1) y[l]++,y[rr + 1]--;
else if(k == 2) b[l]++,b[rr + 1]--;
else r[l]++,r[rr + 1]--;
}
for(int i = 1;i <= n;i++) {
r[i] += r[i - 1],y[i] += y[i - 1],b[i] += b[i - 1];//还原数组
if(!r[i] and y[i] and b[i]) ans++;//判断条件
}
write(ans);
return 0;
}