树状数组(单点修改&区间查询 || 单点查询&区间)
#include<bits/stdc++.h>
using namespade;
int tr[99999];
inline int lowbit(int x){
return x&-x;
}
void add(int x, int k){// 单点修改:O(log n) add(i, k)
for(;x<=n;x+=lowbit(x))
tr[x] += k;
}
int ask(int x){//区间查询:O(log n) ask(m) - ask(n-1)
int ans = 0;
for(;x;x-=lowbit(x))
ans += tr[x];
return ans;
}
int ask2(int x){//单点查询:O(log n) ask2(x) + arr(x)
int ans = 0;
for(;x;x-=lowbit(x))
ans += tr[x];
return ans;
}
void add2(int x, int k){//区间修改:区间x,y add(x,k) add(y+1, -k)
for(;x<=n;x+=lowbit(x))
tr[x] += k;
}
int main(){
return 0;
}