Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // to find the inversion count of array
- #include<stdio.h>
- #define INT_MAX 999999999
- long long int count=0;
- void inversion_count(long int A[],int low,int mid,int high)
- {
- int i,j,k;
- int n1=mid-low+1;
- int n2=high-mid;
- long int l[100001],r[100001];
- for(i=1;i<=n1;++i)
- l[i]=A[low+i-1];
- for(j=1;j<=n2;++j)
- r[j]=A[mid+j];
- l[i]=r[j]=INT_MAX;
- i=j=1;
- for(k=low;k<=high;++k)
- {
- if(l[i]<=r[j])
- {
- A[k]=l[i];
- ++i;
- }
- else
- {
- A[k]=r[j];
- ++j;
- count+=n1-i+1;
- }
- }
- }
- void partition(long int a[],int lo,int hi)
- {
- int mid;
- if(lo<hi)
- {
- mid=(lo+hi)/2;
- partition(a,lo,mid);
- partition(a,mid+1,hi);
- inversion_count(a,lo,mid,hi);
- }
- }
- int main()
- {
- int t,n,i;
- long int arr[200000];
- scanf("%d",&t);
- printf("\n");
- while(t--)
- {
- count=0;
- scanf("%d",&n);
- for(i=0;i<n;++i)
- {
- scanf("%ld",&arr[i]);
- }
- printf("\n");
- partition(arr,0,n-1);
- printf("%lld",count);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment