0分题解
  • 板块P2068 统计和
  • 楼主lvchengze
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/1 08:57
  • 上次更新2024/6/1 11:07:14
查看原帖
0分题解
648871
lvchengze楼主2024/6/1 08:57

看看数据样例吧

#include <iostream>  
#include <vector>  
using namespace std;  
  
const int MAXN = 5e5 + 5;  
int n, m;  
int a[MAXN], fenwick[MAXN];  
  
// 单点更新函数  
void update(int x, int delta) {  
    while (x <= n) {  
        fenwick[x] += delta;  
        x += x & -x; // x的二进制最低位的1变成0  
    }  
}  
  
// 区间求和函数  
int query(int x) {  
    int sum = 0;  
    while (x > 0) {  
        sum += fenwick[x];  
        x -= x & -x; // x的二进制最低位的1变成0  
    }  
    return sum;  
}  
  
int main() {  
    cin >> n;
    cin>>m;  
    while (m--) {  
        char op;int x, y;  
        cin >> op >> x >> y;  
        if (op == 'x') {  
            update(x, y); // 单点更新  
        } else {  
            cout << query(y) - query(x - 1) << endl; // 区间求和  
        }  
    }  
  
    return 0;  
}
2024/6/1 08:57
加载中...