参考链接:https://blog.csdn.net/bestsort/article/details/80796531#%E5%8D%95%E7%82%B9%E6%9B%B4%E6%96%B0%3A
ll lowbit(ll x)
{
return ( x & (-x) );
}
void add(ll now,ll num)
{
for(; now <= n; now += lowbit(now))
{
trie[now] += num;
}
}
ll query(ll x)
{
ll sum = 0;
for(;x >= 1; x -= lowbit(x))
{
sum += trie[x];
}
return sum;
}
用法 1,区间查询和 [fst, lst]
前缀和相减即可 sum = crr[x] - crr[y - 1]
用法2 单点更新 add(pos, val)
用法3 区间加和 [fst, lst] add(fst, val), add(lst + 1, -val); 差分
用法4 区间加和的单点查询 ans = ask(k) + arr[k];
用法5:区间修改+区间查询 待更新
用法6: 逆序数 待更新