线段树求调
  • 板块灌水区
  • 楼主Go_Forward
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/9 21:24
  • 上次更新2024/1/10 13:04:24
查看原帖
线段树求调
1253423
Go_Forward楼主2024/1/9 21:24

P3374 【模板】树状数组 1

#include<bits/stdc++.h>
using namespace std;
int x,y,z,n,m,a[100005];
struct trees
{
	int l,r,num;
}tree[400005];
void build(int l,int r,int g)
{
	tree[g].l=l,tree[g].r=r;
	if(l==r)
	{
		tree[g].num=a[l];
		return;
	}
	int mid=l+r>>1;
	build(l,mid,g*2);
	build(mid+1,r,g*2+1);
	tree[g].num=tree[g*2].num+tree[g*2+1].num;
	return;
}
void add(int id,int num,int g)
{
	if(tree[g].l>id||tree[g].r<id)
	  return;
	tree[g].num+=num;
	if(tree[g].l==tree[g].r)
	  return;
	add(id,num,g*2);
	add(id,num,g*2+1);
 } 
int ask(int l,int r,int g)
{
	if(tree[g].r<l||tree[g].l>r)
	  return 0;
	if(tree[g].l>=l&&tree[g].r<=r)
	  return tree[g].num;
	int ans=ask(l,r,g*2)+ask(l,r,g*2+1);
	//cout<<tree[g].l<<' '<<tree[g].r<<' '<<ans<<'\n';
	return ans;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	  cin>>a[i];
	build(1,n,1);
	while(n--)
	{
		cin>>x>>y>>z;
		if(x==1)
		  add(y,z,1);else
		  cout<<ask(y,z,1)<<'\n';
	}
}//4 5 3 4 3

40分QWQ……别问我为啥用线段树打树状……

2024/1/9 21:24
加载中...