求找题
  • 板块题目总版
  • 楼主Adolfo_North
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/15 19:36
  • 上次更新2023/11/2 13:34:52
查看原帖
求找题
616964
Adolfo_North楼主2023/10/15 19:36

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;
}
2023/10/15 19:36
加载中...