http://luo.hustoj.com/problem.php?cid=2028&pid=2
调错误代码也行
//my code
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
const int mod=1e9+7;
int a[N],c[N];
struct node{
int op,l,r;
}b[N];
int n,m;
int main(){
// freopen("input.txt","r",stdin);
// freopen("biaoda_output.txt","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int cnt=0;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>b[i].op>>b[i].l>>b[i].r;
}
c[m]=1;
for(int i=m;i>=1;i--){
cnt+=c[i];
if(b[i].op==1) {
a[b[i].l]+=cnt;
a[b[i].r+1]-=cnt;
}
else{
c[b[i].r]+=cnt;
c[b[i].l-1]-=cnt;
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans+=a[i];
ans%=mod;
cout<<ans<<' ';
}
return 0;
}
//std
#include<bits/stdc++.h>
using namespace std;
const int M = 1000005;
const int MOD = 1e9 + 7;
int n, m, u[M], l[M], r[M], add1[M], add2[M];
void ad(int &x, int y) {
x = (0LL + x + y + MOD) % MOD;
}
int main() {
freopen("input.txt","r",stdin);
freopen("test_output.txt","w",stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) scanf("%d%d%d", &u[i], &l[i], &r[i]);
int s = 1; //s 表示第 i 个操作需要重复的次数
for (int i = m; i >= 1; i--) {
ad(s, add2[i]);
if (u[i] == 1)
ad(add1[l[i]], s), ad(add1[r[i] + 1], -s);
else
ad(add2[r[i]], s), ad(add2[l[i] - 1], -s); //从右向左前缀和
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ad(ans, add1[i]);
printf("%d ", ans);
}
return 0;
}