Инверсия в массиве представляет собой пару индексов (i, j) таких, что a [i] > a [j] и я < к.
Учитывая 2 массива A и B, и мы должны вернуть число таких пар таким, что a [i] > b [j] и я < к.
Пример:
Пусть n = 3 и A [] = [5,6,7] и B [] = [1,2,3], тогда ответ равен 3. 3 пары: (5,2), (5,3) и (6,3).
Мой код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int len;
scanf("%d",&len);
int a[len];
int b[len];
for(int i = 0; i < len; i++)
scanf("%d",&a[i]);
for(int i = 0; i < len; i++)
scanf("%d",&b[i]);
int count = 0;
for (int i = 0;i < len; i++)
{
for(int j = i+1; j < len; j++)
{
if(a[i] > b[j])
{
count++;
}
}
}
printf("%d",count);
}
Но это решение O (N ^ 2). Мне нужно лучшее решение как N <= 200000. Я знаю, что мы можем подсчитывать инверсии в одном массиве в O (N * Log N). Но как это можно сделать для двух разных массивов?