Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.ComponentModel;
- namespace Songs
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- public class Program
- {
- public static void Main()
- {
- int n = int.Parse(Console.ReadLine());
- var first = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
- var second = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
- var rename = new int[n + 1];
- for (int i = 0; i < n; i++)
- {
- rename[first[i]] = i;
- }
- for (int i = 0; i < n; i++)
- {
- second[i] = rename[second[i]];
- }
- Console.WriteLine(CountInversions(second, 0, n));
- }
- private static long CountInversions(int[] array, int left, int right)
- {
- if (left + 1 == right)
- {
- return 0;
- }
- int middle = (left + right)/2;
- long inversions = CountInversions(array, left, middle) + CountInversions(array, middle, right);
- int[] sorted = new int[right - left];
- int i = left;
- int j = middle;
- int k = 0;
- while (i < middle && j < right)
- {
- if (array[i] < array[j])
- {
- sorted[k] = array[i];
- i++;
- }
- else
- {
- inversions += (middle - i);
- sorted[k] = array[j];
- j++;
- }
- k++;
- }
- while (i < middle)
- {
- sorted[k] = array[i];
- i++;
- k++;
- }
- while (j < right)
- {
- sorted[k] = array[j];
- j++;
- k++;
- }
- for (k = 0; k < sorted.Length; k++)
- {
- array[left + k] = sorted[k];
- }
- return inversions;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement