1

Тема: 1439 timus

Как решить эту задачу - http://acm.timus.ru/problem.aspx?space=1&num=1439 за Nlog(N)?; очевидная идея - к-тая порядковая статистика за log(N)*log(N) сумматором или log(N) каким-нибудь сбалансированным деревом не катит из-за ограничения на N = 10^9 - массив такой длины не объявить (. Пытался приспособить сжатие координат, но что-то контрпримеры находятся(.

2

Re: 1439 timus

Я решал с помощью treap + binary search.  Зачем массив на N для сбалансированного дерева ?

3 Отредактировано Baur (2010-10-18 19:43:04)

Re: 1439 timus

Для сбалансированного дерева нужен не массив на N, а set<int> на N. Если там хранить неудаленные числа - то, есть в начале все числа от 1 до N, то как раз запрос сводится к нахождению к-того элемента в сете (то есть сет придется писать ручками). Я не знаком с  treap, но это же дерево, разве его не надо хранить в виде массива на N по аналогии с деревом отрезков? или там структура из указателей?

4

Re: 1439 timus

Про treap есть отличная статья здесь http://e-maxx.ru/algo/treap big_smile

Ну а вообще суть решения в том, чтобы хранить все неудаленные числа в виде набора непересекающихся отрезков(тогда каждый запрос на удаление числа увеличит количество отрезков не более чем на 1).

Re: 1439 timus

А я в дереве хранил настоящие позиции удаленных комнат, с этой информацией тоже можно отвечать на запросы.