利用差分思想来表示是否含有某个特征,并且进行叠加,最终通过前缀和的方式求出是否含有这一特征。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<int>>v;

int main() {
    int n,m;cin>>n>>m;
    v.assign(n+2,vector<int>(4,0));

    for (int i = 0;i < m;i++){
        int l,r,k;cin>>l>>r>>k;
        v[l][k]++;v[r+1][k]--;
    }

    vector<int>t(4,0);int cnt = 0;
    for (int i = 0;i < n;i++){
        for (int j = 1;j <= 3;j++){
            t[j]+=v[i][j];
        }
        if (t[1] > 0&&t[2] > 0&&t[3] <= 0)cnt++;
    }cout<<cnt;
    return 0;
}
// 64 位输出请用 printf("%lld")