返回题解分享
讨论 / 题解分享/ 帖子详情

单点修改区间查询 - 题解

#include <bits/stdc++.h>
#define endl '\n'
using namespace std; 
using ll = long long;
using ULL = unsigned long long;
const int N = 1e6+5;

int n, q;
ll a[N],t[N];

inline int lowbit(int x) {return x & (-x);}

inline void update(int k,ll x) {
    for (int i = k; i <= n; i += lowbit(i)) 
        t[i] += x;
}

inline ll getsum(int k) {
    ll res = 0;
    for (int i = k; i > 0; i -= lowbit(i))
        res += t[i];
    return res;
}
 
inline void solve() {
    cin >> n >> q;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i<= n; i++) update(i,a[i]);

    for (; q-- ;){
        int op; cin >> op;
        if (op == 1) {
            ll k, v; cin >> k >> v;
            update(k,v);
        }else {
            ll l, r; cin >> l >> r;
            cout << getsum(r) - getsum(l - 1) << endl;
        }
    } 


}

int main() { 
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1; 
    //int _; cin >> _; 
    while (_--) solve();
    return 0;
}
0 回复 0 转发 0 喜欢 5 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!