We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
importjava.io.*;importjava.util.*;importjava.text.*;importjava.math.*;importjava.util.regex.*;publicclassSolution{publicstaticintmerge(int[]arr,intleft1,intright1,intleft2,intright2){int[]temp=newint[right2-left1+1];intindex1=left1;intindex2=left2;inttemp_index=0;intinversion_count=0;while(index1<=right1&&index2<=right2){if(arr[index1]<=arr[index2]){temp[temp_index]=arr[index1];index1++;temp_index++;}else{//In this case we add to our inversion count:inversion_count+=right1-index1+1;temp[temp_index]=arr[index2];index2++;temp_index++;}}while(index1<=right1){temp[temp_index]=arr[index1];index1++;temp_index++;}while(index2<=right2){temp[temp_index]=arr[index2];index2++;temp_index++;}for(inti=0;i<temp.length;i++){arr[left1+i]=temp[i];}returninversion_count;}publicstaticintfindNegativeSubarrays(int[]arr,intleft,intright){if(right<left){return0;}if(right==left){if(arr[left]<0){return1;}else{return0;}}intmid=(left+right)/2;intnum1=findNegativeSubarrays(arr,left,mid);intnum2=findNegativeSubarrays(arr,mid+1,right);intnum3=merge(arr,left,mid,mid+1,right);returnnum1+num2+num3;}publicstaticvoidmain(String[]args){intn;Scannerscan=newScanner(System.in);n=scan.nextInt();scan.nextLine();intarr[]=newint[n];for(inti=0;i<n;i++){arr[i]=scan.nextInt();}intaccumulator[]=newint[n];accumulator[0]=arr[0];for(inti=1;i<n;i++){accumulator[i]=accumulator[i-1]+arr[i];}System.out.println(findNegativeSubarrays(accumulator,0,n-1));}}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Java Subarray
You are viewing a single comment's thread. Return to all comments →
Asymptotically fastest you can achieve: