#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;
}