社区讨论

求条(玄关)

P3374【模板】树状数组 1参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m1w9z0l4
此快照首次捕获于
2024/10/05 22:54
去年
此快照最后确认于
2025/11/04 17:55
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
struct hns{
	int l,r,n;
}d[500010*4];
int ans,n,m,a[500010];
void build(int l,int r,int p){
	if(l==r){
		d[p].l=l,d[p].r=r,d[p].n=a[r];
		return;
	}
	int m=r+((r-l)>>1);
	build(l,m,p*2);
	build(m+1,r,p*2+1);
	d[p].n=d[p*2].n+d[p*2+1].n,d[p].l=l,d[p].r=r;
	return;
}
void check(int l,int r,int p){
	if(d[p].l>=l && d[p].r<=r){
		ans+=d[p].n;
		return;
	}
	if(d[p*2].r>=l) check(l,r,p*2);
	if(d[p*2+1].l<=r) check(l,r,p*2+1);
	return;
}
void pls(int p,int x,int k){
    d[p].n+=k;
    if(d[p].l==d[p].r) return;
    if(x<=d[p*2].r) pls(p*2,x,k);
    if(x>=d[p*2+1].l) pls(p*2+1,x,k);
    return;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>m;
	for(int i=1; i<=n; i++){
		cin>>a[i];
	}
	build(1,n,1);
	for(int i=1; i<=m; i++){
		int a;
		cin>>a;
		if(a==1){
			int b,c;
			cin>>b>>c;
			pls(1,b,c);
		}else{
			int b,c;
			cin>>b>>c;
			ans=0;
			check(1,b,c);
			cout<<ans<<"\n";
		}
	}
	return 0;
}

本人第一次写线段树,根本搞不清楚为什么会炸

回复

5 条回复,欢迎继续交流。

正在加载回复...