Оказалось что эта задача уже была на МУИТ OPEN.
Ну и авторское решение на эту задачу оказалось за O(n * log(n))
Пусть пара (i, j) и пара (j, i) будет одним и тем же, очевидно что только одна пара из этих двух может быть правильной.
Давай обозначать пару (i, j) маской из трех битов:
000 (a_i < a_j, b_i < b_j, c_i < c_j)
001 (a_i < a_j, b_i < b_j, c_i > c_j)
011 (a_i < a_j, b_i > b_j, c_i > c_j)
010 (a_i < a_j, b_i > b_j, c_i < c_j)
Если a_i > a_j прост поменяем местами i, j, тк мы сказали что это одно и тоже. Теперь давай делать некоторые действия и смотреть как это влияет на ответ.
Давайте делать так построим массив TEMP_{a_i} = b_i и посчитаем кол-во инверсий в нём, и отнимем это от ответа, тогда посмотрим сколько раз мы учли пары определённого вида в ответе:
000 0
001 0
011 -1
010 -1
Теперь сделаем массив TEMP_{b_i} = c_i и посчитаем кол-во инверсий в нём, и отнимем это от ответа и посмотрим сколько раз мы учли пары определённого вида в ответе:
000 0
001 -1
011 -1
010 -2
Теперь сделаем массив TEMP_{a_i} = c_i и посчитаем кол-во инверсий в нём, и отнимем это от ответа и посмотрим сколько раз мы учли пары определённого вида в ответе:
000 0
001 -2
011 -2
010 -2
Заметим что все неправильные пары мы посчитали два раза, теперь давай просто добавим к ответ у все возможные пары в массиве умноженные на два(т.е. (n * (n - 1))
000 2
001 0
011 0
010 0
Теперь поделим ответ на два и получится ответ который от нас требовали.
000 1
001 0
011 0
010 0
(Решение мне подсказал Темирлан Сатылханов спасибо ему!)