思路
插入一个数x时,在该位置x加1,就是add(x,1),查看当前小于等于x的数有几个,就是query(x),那么比x大的数就是num - query(x),num是当前插入的数的个数。累计每次插入比x大的数的个数即可。
注意:
- 如果不限制数的范围,需要加离散化。
- 树状数组不要开四倍空间,线段树开四倍
- 离散化的过程排序 -> 去重 -> 二分
#include<bits/stdc++.h>
using namespace std;
const long long maxn = 100010;
vector<int> ori,now;
long long tree[maxn];
long long n;
long long lowbit(long long x){
long long temp = x & -x;
return temp;
}
void add(long long pos