Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class Solution
- {
- static long countInversions(int[] arr)
- {
- var inversionsCount = 0L;
- MergeSort(arr, 0, arr.Length - 1, ref inversionsCount);
- return inversionsCount;
- }
- static void MergeSort(int[] arr, int l, int r, ref long inversionsCount)
- {
- if (l < r)
- {
- var m = l + (r - l) / 2;
- MergeSort(arr, l, m, ref inversionsCount);
- MergeSort(arr, m + 1, r, ref inversionsCount);
- Merge(arr, l, m, r, ref inversionsCount);
- }
- }
- static void Merge(int[] arr, int l, int m, int r, ref long inversionsCount)
- {
- var lSize = m - l + 1;
- var rSize = r - m;
- var lArr = new int[lSize];
- var rArr = new int[rSize];
- Array.Copy(arr, l, lArr, 0, lSize);
- Array.Copy(arr, m + 1, rArr, 0, rSize);
- int i = 0, j = 0, k = 0;
- while (i < lSize && j < rSize)
- {
- if (lArr[i] <= rArr[j])
- {
- arr[l + k++] = lArr[i++];
- }
- else
- {
- inversionsCount += lSize + j - k;
- arr[l + k++] = rArr[j++];
- }
- }
- while (i < lSize)
- arr[l + k++] = lArr[i++];
- while (j < rSize)
- arr[l + k++] = rArr[j++];
- }
- static void Main(string[] args)
- {
- int t = Convert.ToInt32(Console.ReadLine());
- for (int tItr = 0; tItr < t; tItr++)
- {
- int n = Convert.ToInt32(Console.ReadLine());
- int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), arrTemp => Convert.ToInt32(arrTemp));
- long result = countInversions(arr);
- Console.WriteLine(result);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement