[树状数组]3120 小陶的疑惑

51nod 题目\(Link\)

题目解析

这是一道树状数组的模板题,但是请大家注意要开long long

有关树状数组

ll lowbit (ll n)
{
	return n & (-n);	
} 

void update (ll x, ll y) // 修改
{
	for (; x <= n; x += lowbit (x))
		c[x] += y;
}

ll sum (ll x) // 查询
{
	ll ans = 0;
	for (; x; x -= lowbit (x))
		ans += c[x];
	return

Code

#include <bits/stdc++.h>
#define N 2000005
#define ll long long 
using namespace std;

ll n, m; 
ll a[N], c[N];

ll lowbit (ll n)
{
	return n & (-n);	
} 

void update (ll x, ll y)
{
	for (; x <= n; x += lowbit (x))
		c[x] += y;
}

ll sum (ll x)
{
	ll ans = 0;
	for (; x; x -= lowbit (x))
		ans += c[x];
	return ans;
}

int main ()
{
	scanf ("%lld%lld", &n, &m);
	for (ll i = 1; i <= n; ++ i)
	{
		scanf ("%lld", &a[i]);
		update (i, a[i]);
	}
	for (ll i = 1; i <= m; ++ i)
	{
		ll c;
		scanf ("%lld", &c);
		if (c == 1)
		{
			ll x, d;
			scanf ("%lld%lld", &x, &d);
			update (x, d);
		}
		else
		{
			ll hd, d;
			scanf ("%lld%lld", &hd, &d);
			printf ("%lld\n", sum (d) - sum (hd - 1));
		}
	}
	return 0;
}
posted @ 2022-01-12 21:24  unknown_future  阅读(30)  评论(0编辑  收藏  举报