Guest User

Untitled

a guest
Jun 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. // to find the inversion count of array
  2. #include<stdio.h>
  3. #include<limits.h>
  4.  
  5. int count=0;
  6.  
  7. void inversion_count(long long int a[],int lo,int mid,int hi)
  8. {
  9. int i,j,k,n1,n2;
  10. n1=mid-lo+1;
  11. n2=hi-mid;
  12. int l[100000],r[100000];
  13. for(i=0;i<n1;++i)
  14. l[i]=a[lo+i];
  15. for(j=0;j<n2;++j)
  16. r[j]=a[mid+j];
  17. i=j=0;
  18. l[n1]=INT_MAX;
  19. r[n2]=INT_MAX;
  20. for(k=lo;k<hi;++k)
  21. {
  22. if(l[i]<=r[j])
  23. {
  24. a[k]=l[i];
  25. ++i;
  26. }
  27. else
  28. {
  29. a[k]=r[j];
  30. ++j;
  31. // count+=mid-i+1;
  32. }
  33. }
  34. return;
  35. }
  36.  
  37. void partition(long long int a[],int lo,int hi)
  38. {
  39. int mid;
  40. if(lo<hi)
  41. {
  42. mid=(lo+hi)/2;
  43. partition(a,lo,mid);
  44. partition(a,mid+1,hi);
  45. inversion_count(a,lo,mid,hi);
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. int t,n,i;
  52. long long arr[200000];
  53. scanf("%d\n\n",&t);
  54. while(t--)
  55. {
  56. count=0;
  57. scanf("%d\n",&n);
  58. for(i=0;i<n;++i)
  59. {
  60. scanf("%d",&arr[i]);
  61. }
  62. partition(arr,0,n-1);
  63. printf("\n%d",count);
  64. }
  65. for(i=0;i<n;++i)
  66. {
  67. printf("%d\t",arr[i]);
  68. }
  69. return 0;
  70. }
Add Comment
Please, Sign In to add comment