题目描述:
AC代码:
class Bit{
private int n;
private int[] C;
public Bit(int n){
this.n=n;
C=new int[n+1];
}
public int lowbit(int x){
return x&(-x);}
public int getsum(int x){
int sum=0;
for(int i=x;i>0;i-=lowbit(i))
sum+=C[i];
return sum;
}
public void update(int x,int v){
for(int i=x;i<=n;i+=lowbit(i))
C[i]+=v;
}
}
class Solution {
public int low(long []a,long x){
int l=-1,r=a.length;
while(l+1!=r){
int m=(l+r)/2;
if(a[m]<x) l=m;
else r=m;
}
return l+1;
}
public int reversePairs(int[] nums) {
int n=nums.length;
long copy[]=new long[n];
for(int i=0;i<n;i++) copy[i]=2l*nums[i];
Arrays.sort(copy);
Bit bit=new Bit(n);
int ans=0;
for(int i=n-1;i>=0;i--){
ans+=bit.getsum(low(copy,1l*nums[i]));
bit.update(low(copy,2l*nums[i])+1,1);
}
return ans;
}
}