const int maxn=1e5+5; const int mod=1e9+7; class Solution { public: #define lowbit(x) x&(-x) int sum[100005]; vector<int> p; void add( int x ) { while(x<maxn ){ sum[x]++,x+=lowbit(x);} }; int query( int x ,int ans=0 ) {while(x)ans=(ans+sum[x])%mod,x-=lowbit(x);return ans; } int getId( int x ) { return lower_bound(p.begin(),p.end(),x)-p.begin()+1; } int InversePairs(vector<int> data) { p.clear(); for( int v:data ) p.push_back(1e5-v); sort(p.begin(),p.end()); p.erase(unique(p.begin(),p.end()),p.end()); int ans=0; for( int v:data ){ v=1e5-v; v=getId(v); add(v); ans=(ans+query(v-1))%mod; } return ans; } };