输入格式

第一行两个整数 $n, m$,分别表示油漆的罐数和专家进行的操作数。
接下来 $m$ 行,每行三个整数 $l_i, r_i, k_i$,表示在第 $i$ 次操作中向编号在 $l_i$ 到 $r_i$ 之间(包括两端)的罐子中加入颜料。加入的颜料是黄色($k_i=1$),蓝色($k_i=2$)或红色($k_i=3$)中的一种。

输出格式

输出一行一个整数,表示在所有操作之后绿色油漆的罐数。

说明/提示

判断一罐油漆最后是不是绿色,必须同时满足以下三个条件:

  1. 必有黄色 ($Yellow > 0$)
  2. 必须有蓝色 ($Blue > 0$)
  3. 绝对不能有红色 ($Red == 0$)

开辟三个数组统计每个位置上各种颜色颜料的数量
通过差分数组来模拟在区间上加入颜料的操作

#include<iostream>
#include<vector>
using namespace std;
int main(){
int m,n,cnt=0;
cin>>n>>m;
vector<int>yellow(n+1,0);
vector<int>blue(n+1,0);
vector<int>red(n+1,0);
for(int i=1;i<=m;i++)
{
int l,r,k;
cin>>l>>r>>k;
if(k==1)
yellow[l-1]+=1,yellow[r]-=1;
if(k==2)
blue[l-1]+=1,blue[r]-=1;
if(k==3)
red[l-1]+=1,red[r]-=1;
}
for(int i=1;i<n;i++)
yellow[i]+=yellow[i-1],blue[i]+=blue[i-1],red[i]+=red[i-1];
for(int i=0;i<n;i++)
if(yellow[i]>0&&blue[i]>0&&red[i]==0)
cnt++;
cout<<cnt;
}