Если вы ограничите задачу двумя атрибутами (например, только B_i
и R_i
, только для целей иллюстрации), вы можете рассматривать эти атрибуты как точки на 2D-плоскости. Для каждой точки (соответствующей леди) вам нужно посчитать количество точек в (полубесконечном) прямоугольнике «справа и выше» данной точки.
Я думаю, что решение быстрее, чем O(n^2)
будет включать дерево диапазонов , хотя я не думал о деталях. Смотрите также иллюстрацию здесь .
РЕДАКТИРОВАТЬ : и вы сохраняете (или обновляете при построении) количество точек «ниже» каждого узла с узлом, чтобы вы могли, например, легко получить количество точек ниже или выше точки разделения данного узла.