public static void main(String[] args) {
int[] arr = {1, 3, 4, 5, 6, 12, 123, 1, 2};
int ans = process(arr,0,arr.length-1);
}
private static int process(int[] arr, int l, int r) {
if (l==r) {return 0;}
int mid = l+((r-l)>>1);
return process(arr,l,mid)+process(arr,mid+1,r)+marge(arr,l,mid,r);
}
private static int marge(int[] arr, int l, int mid, int r) {
int ans = 0 ;
int [] help = new int[r-l+1];
int helpI = 0;
int p1 = l;
int p2 = mid+1;
while (p1<=mid && p2 <=r){
ans +=arr[p1]<arr[p2]? (arr[p1])*(r-p2+1):0;
help[helpI++] = arr[p1]<=arr[p2]?arr[p1++]:arr[p2++];
}
while (p1<=mid ){
help[helpI++] = arr[p1++];
}
while ( p2 <=r){
help[helpI++] = arr[p2]++;
}
for (int i = 0; i < help.length; i++) {
arr[i+l]=help[i];
}
return ans;
}
最小和问题
最新推荐文章于 2024-07-23 17:36:37 发布