为啥是0
查看原帖
为啥是0
971323
See_you_again_楼主2024/12/28 17:43
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1008610;
int n,w;
int x,y;
int m[maxn];
int A[maxn];
int num;
int segment_tree[maxn<<2],add[maxn<<2];
void pushup(ll num)
{
	segment_tree[num] = segment_tree[num<<1] + segment_tree[num<<1];
}
void build(ll l,ll r,ll num)
{
	if(l == r)
	{
		segment_tree[num] = A[l];
		return;
	}
	ll m = (l + r) >> 1;
	build(l,m,num << 1);
	build(m+1,r,num << 1|1);
}
void pushdown(ll num,ll cnt_l,ll cnt_r)
{
	if(add[num])
	{
		add[num << 1] += add[num];
		add[num << 1|1] += add[num];
		segment_tree[num << 1] += add[num] * cnt_l;
		segment_tree[num << 1 | 1] += add[num] * cnt_r;
		add[num] = 0;
	}
}
ll query(ll L,ll R,ll l,ll r,ll num)
{
	if(L <= l && r <= R){
		return segment_tree[num];
	}
	ll m = (l + r) >> 1;
	pushdown(num,m - l + 1,r - m); 
	ll ANS = 0;
	if(L <= m) ANS += query(L,R,l,m,num << 1);
	if(R >  m) ANS += query(L,R,m+1,r,num << 1 | 1);
	return ANS;
}
int main()
{
	cin >> n >> w;
	string c;
	/*for(int i = 1;i <= n;i++)
	{
		cin >> m[i];
	}*/
	build(1,n,1);
	ll num;
	for(int i = 1;i <= w;i++)
	{
		cin >> c;
		if(c == "x")
		{
			cin >> x >> y;
			m[x] += y;
		}
		else if(c == "y")
		{
			cin >> x >> y;
			cout << query(x,y,1,n,1);
		}
	}
	return 0;
} 
2024/12/28 17:43
加载中...