#include<iostream>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
using ll=long long;
const int N=2e5+10;
int a[N];
ll t[N];
int n;
//最低位1的位置
int lowbit(int x) {
    return x&-x;
}
//添加操作
void add(ll k,ll v){
    for(int i=k;k<=n;i+=lowbit(i)) t[i]+=v;
}
//求和
ll sum(int k){
    ll ans=0;
    for(int i=k;i<=n;i+=lowbit(i)) ans+=t[i];
    return ans;
}
int main(){
    IOS;
}

权值树状数组(需要离散化)

typedef long long ll;
typedef pair<int,int> pii;
const int N=1e5+10;
int t[N],n;
int lowbit(int x){
    return x&-x;
}
//权值的位置x增加k
void add(int x,int k){
    for(int i=x;i<=n;i+=lowbit(i)) t[i]+=k;
}
//查询从权值为[1,x]的总个数
ll sum(int x){
    ll ans=0;
    for(int i=x;i>0;i-=lowbit(i)) ans+=t[i];
    return ans;
}

离散化模版

typedef long long ll;
typedef pair<int,int> pii;
vector<int> arrayRankTransform(vector<int>& arr) {
       int n=arr.size();
        vector<int> sort_arr=arr;
        sort(sort_arr.begin(),sort_arr.end());
        sort_arr.erase(unique(sort_arr.begin(),sort_arr.end()),sort_arr.end());
        //二分得到编号
        for(int &x:arr){
            x=lower_bound(sort_arr.begin(),sort_arr.end(),x)-sort_arr.begin()+1;
        }
        return arr;
    }