为什么崩溃了
  • 板块学术版
  • 楼主noip_ioi_luck
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/18 20:09
  • 上次更新2023/11/18 20:11:54
查看原帖
为什么崩溃了
679549
noip_ioi_luck楼主2023/11/18 20:09

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,k,a,b,lc,rc,mid;
struct node
{
	int l,r,mx;
}tree[100010];
void build(int k,int l,int r)
{
	tree[k].l=l;
	tree[k].r=r;
	if(l==r)
	{
		tree[k].mx=0;
		return ;
	}
	int mid=(l+r)/2;
	lc=k*2;
	rc=k*2+1;
	build(lc,l,mid);
	build(rc,mid+1,r);
	tree[k].mx=max(tree[lc].mx,tree[rc].mx);
}
void update(int k,int i,int v)
{
	if(tree[k].l==tree[k].r&&tree[k].l==i)
	{
		tree[k].mx+=v;
		return ;
	}
	int mid,lc,rc;
	mid=(tree[k].l+tree[k].r)/2;
	lc=k*2;
	rc=k*2+1;
	if(i<=mid)
		update(lc,i,v);
	else
		update(rc,i,v);
	tree[k].mx=max(tree[lc].mx,tree[rc].mx);
}
int query(int k,int l,int r)
{
	if(tree[k].l>=l && tree[k].r<=r)
		return tree[k].mx;
	int mid,lc,rc;
	mid=(tree[k].l+tree[k].r)/2;
	lc=k*2;
	rc=k*2+1;
	int Max=INT_MIN;
	if(l<=mid)
		Max=max(Max,query(lc,l,r));
	if(r>mid)
		Max=max(Max,query(rc,l,r));
	return Max;
}
int main()
{
	//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	build(1,1,n);
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>k>>a>>b;
		if(k==0)
			update(1,a,b);
		else
			cout<<query(1,a,b)<<"\n";
	}
}
2023/11/18 20:09
加载中...