Розв’язання 1: Знайдіть перпендикулярні бісектриси між парами точок і побудуйте розташування цих прямих. У розташуванні є Θ ( n 4 ) комірок, усередині яких відсортований порядок є постійним. Отже, побудуйте структуру даних про розташування точок для розташування та прикрасьте кожну комірку відсортованим порядком, який потрібно повернути для точок у цій комірці. Відсортовані порядки між сусідніми клітинками відрізняються лише одним транспозицією, тому ви можете використовувати стійку структуру даних, щоб дозволити представленням цих відсортованих порядків ділити простір. Загальний простір - O ( n 4 ), а час запиту - OΘ(n2)Θ(n4)O(n4) .O(logn)
Рішення 2: Виберіть випадковий зразок цих самих перпендикулярних бісектрис, побудуйте їх розташування та розділіть кожну комірку розташування по вертикальних відрізках ліній через кожне перетинання двох вибіркових ліній. Отриманий розділ має Θ ( n 2 ) комірок, кожна з яких з великою часткою ймовірності перетинається через O ( n ) без вибірки бісектриси. Прикрасьте кожну комірку розділу за допомогою дійсного упорядкованого упорядкування точок, переглянутих із деякого x у комірці. Загальний простір дорівнює O ( n 3 ) .Θ(n)Θ(n2)O(n)O(n3)
Тепер, щоб зробити запит, знайдіть точку запиту в розділі, знайдіть впорядкованість, що зберігається в комірці розділу, та використовуйте алгоритм сортування декартового дерева порівняння Levcopoulos & Petersson (1989), починаючи з цього збереженого замовлення. Час для цього кроку пропорційне де k i - кількість точок, які не відповідають порядку з точкою y i . Але ∑ k i - O ( n ) (кожен нерозбірний бісектриса викликає щонайменше одну пару точок поза порядком), тому час запиту∑iO(1+logki)kiyi∑kiO(n) також є O ( n ) .∑iO(1+logki)O(n)