[树状数组]3120 小陶的疑惑
题目解析
这是一道树状数组的模板题,但是请大家注意要开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;
}