- 树状数组 1 :单点修改,区间查询
题解
- 2024-5-30 21:54:42 @
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e6 + 5;
long long bit[MAXN];
int a[MAXN];
int n, m;
int Lowbit_Set(int x)
{
return x & (-x);
}
void Update_Set(int x, int num)
{
for (int i = x; i <= n; i += Lowbit_Set(i))
{
bit[i] += num;
}
}
long long Sum_Set(int x)
{
long long sum_ = 0;
for (int i = x; i >= 1; i -= Lowbit_Set(i))
{
sum_ += bit[i];
}
return sum_;
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
Update_Set(i, a[i]);
}
for (int i = 1; i <= m; i++)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
if (x == 1) {
Update_Set(y, z);
}
if (x == 2)
{
long long sum1_ = Sum_Set(y - 1);
long long sum2_ = Sum_Set(z);
printf("%lld\n", sum2_ - sum1_);
}
}
return 0;
}
0 条评论
目前还没有评论...
信息
- ID
- 2610
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 225
- 已通过
- 25
- 上传者