Lib/転倒数
code:cpp
void zaatu(vector<int> &vec){
vector<int> tmp_vec(vec.size());
ll n = vec.size();
rep(i,n) tmp_veci = veci; sort(tmp_vec.begin(),tmp_vec.end());
map<int,int> mp;
int cnt = 0;
rep(i,n){
if(mp.count(tmp_veci) == 0){ cnt++;
}
}
rep(i,n) veci = mp[veci]; }
ll inv_num(vector<ll> v){
ll n = v.size();
zaatu(v);
auto op = [](ll a,ll b){return a+b;};
auto e = [](){return 0;};
atcoder:segtree<ll,op,e> seg(n+1);
ll ans = 0;
for(ll val : v){
ans += seg.prod(val+1,n+1);
seg.set(val,seg.get(val)+1);
}
return ans;
}
Use:
validate: