树状数组,求助!
查看原帖
树状数组,求助!
494896
YingHN楼主2022/4/24 21:17
#include<bits/stdc++.h>
#include<vector>
using namespace std;
int lowbit(int a)
{
	return a & (-a);
}

void add(int k, vector<int> tr, int i)
{
	int n = tr.size();
	for(int p = i; p <= n; p += lowbit(p))
		tr[p] += k;
	return;
}
int ask(int i, vector<int> tr)
{
	int ans = 0;
	for(int p = i; p; p -= lowbit(p))
		ans += tr[p];
	return ans;
}
int find(int l, int r, vector<int> tr)
{
	return ask(r, tr) - ask(l - 1, tr);
}
void build(vector<int> tr, vector<int> a)
{
	int n = a.size();
	tr.resize(5 * n, 0);
	for(int i = 1; i <= n; i++)
		add(a[i], tr, i);
}
int main()
{
	int n, m;
	cin>>n>>m;
	vector<int> a;
	a.resize(n + 1);
	for(int i = 1; i <= n; i++)
	{
		cin>>a[i];
	}
	vector<int> tr;
	build(tr, a);
	while(m--)
	{
		int t;
		cin>>t;
		if(t == 1)
		{
			int k, x;
			cin>>x>>k;
			add(k, tr, x);
		}
		if(t == 2)
		{
			int x, y;
			cin>>x>>y;
			cout<<find(x, y, tr)<<endl;
		}
	}
	return 0;
}

2022/4/24 21:17
加载中...