classNumArray{int[] _nums;int[] a;publicNumArray(int[] nums){
_nums =newint[nums.length];
a =newint[nums.length +1];for(int i =0; i < nums.length; i ++){update(i, nums[i]);
_nums[i]= nums[i];}}publicvoidupdate(int index,int val){int _val = val;int _index = index;
val -= _nums[index];
index ++;while(index < a.length){
a[index]+= val;
index +=lowbit(index);}
_nums[_index]= _val;}intsum(int index){
index ++;int ans =0;while(index >0){
ans += a[index];
index -=lowbit(index);}return ans;}publicintsumRange(int left,int right){returnsum(right)-sum(left -1);}intlowbit(int x){return x &(- x);}}/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* obj.update(index,val);
* int param_2 = obj.sumRange(left,right);
*/
classSolution{int[] a;int n;publicvoidinit(int n){this.n = n;
a =newint[n];}publicintlowbit(int x){return x &(-x);}publicvoidinsert(int ind,int x){while(ind < n){
a[ind]+= x;
ind +=lowbit(ind);}}publicintsum(int ind){int sum =0;while(ind >0){
sum += a[ind];
ind -=lowbit(ind);}return sum;}publicintreversePairs(int[] nums){
Set<Integer> set =newTreeSet<Integer>();for(int num : nums) set.add(num);
TreeMap<Integer, Integer> numToId =newTreeMap<Integer, Integer>();int id =0;for(int num : set) numToId.put(num,++ id);init(id +1);int ans =0;for(int i =0; i < nums.length; i ++){long dnum =(long)nums[i]*2+1;if(dnum >2147483647){insert(numToId.get(nums[i]),1);continue;}elseif(dnum <-2147483648){
dnum =-2147483648;}
Integer key = numToId.ceilingKey((int)dnum);if(key != null){int Id = numToId.get(key);
ans += i -sum(Id -1);}insert(numToId.get(nums[i]),1);}return ans;}}
classSolution{finalstaticint MOD =1_000_000_007;int[] a;int n;publicvoidinit(int n){this.n = n;
a =newint[n];}publicintlowbit(int x){return x &(-x);}publicvoidinsert(int i,int x){while(i < n){
a[i]+= x;
i +=lowbit(i);}}publicintgetSum(int i){int sum =0;while(i >0){
sum += a[i];
i -=lowbit(i);}return sum;}publicintcreateSortedArray(int[] instructions){int maxNum =0;for(int num : instructions){
maxNum = Math.max(maxNum, num);}init(maxNum +1);int ans =0;for(int i =0; i < instructions.length; i ++){
ans += Math.min(getSum(instructions[i]-1), i -getSum(instructions[i]));
ans %= MOD;insert(instructions[i],1);}return ans;}}