利用差分思想来表示是否含有某个特征,并且进行叠加,最终通过前缀和的方式求出是否含有这一特征。
#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")

京公网安备 11010502036488号