classSolution{#define lowbit(x) (x&-x)private:constint mod =1e9+7;conststaticint maxn =2e5+7;struct NODE {int val, pos;NODE(int v =0,int p =0):val(v),pos(p){}}a[maxn];int c[maxn]={0};public:intInversePairs(vector<int> data){int ans =0;for(int i =0; i < data.size();++i){
a[i +1].pos = i +1;
a[i +1].val = data[i];}sort(a +1, a +1+ data.size(),[](NODE a, NODE b)->bool{return a.val < b.val;});for(int i =1; i <= data.size();++i){add(a[i].pos,1);
ans =(ans + i -getsum(a[i].pos))% mod;}return ans;}voidadd(int i,int x){while(i < maxn){
c[i]+= x;
i +=lowbit(i);}}intgetsum(int i){int res =0;while(i >0){
res += c[i];
i -=lowbit(i);}return res;}#undef lowbit(x)};