Такое возможно? Будет N2 вершин? А реверс подматрицы за logNlogM можно делать?
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3831 |
3 | Radewoosh | 3646 |
4 | jqdai0815 | 3620 |
4 | Benq | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | gamegame | 3386 |
10 | ksun48 | 3373 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 164 |
1 | maomao90 | 164 |
3 | Um_nik | 163 |
4 | atcoder_official | 160 |
5 | -is-this-fft- | 158 |
6 | awoo | 157 |
6 | adamant | 157 |
8 | TheScrasse | 154 |
8 | nor | 154 |
10 | Dominater069 | 153 |
Такое возможно? Будет N2 вершин? А реверс подматрицы за logNlogM можно делать?
Название |
---|
Что вы понимаете под реверсом подматрицы?
Переворот строк, а потом столбцов.
Берем массив из N декартовых деревьев по неявному ключу на М элементов. Допустим приходит запрос развернуть подматрицу по горизонтали — то есть по сути развернуть подстроку в каждой строке, которая попадает в запрос — тогда просто M раз запускаем разворот. Если надо развернуть по вертикали то меняем кусок дерева из первой строки запроса с куском дерева из последней строки запроса, кусок дерева из второй — с куском дерева из предпоследней и т.д. Оба запроса будут работать за O(NlogM). Сомневаюсь, что реально за LogN*logM.
это влоб, мне кажется товарищу хочется чего-то экстравагантного.
но честно говоря, за logNlogM врядли... еще меня мучает вопрос, зачем (НУ НАХРЕНА) это нужно
Всегда мечтал крутить матрицу за логарифм.
бойтесь, может выйти так, что придется довольствоваться второй частью названия вашего поста
Честно говоря, не поворачивается язык назвать массив декартовых деревьев по неявному ключу решением влоб =)
ну это первое что приходит в голову
Скорее всего, нельзя делать реверс подматрицы за log n log m. На Петрозаводских сборах была такая задача, и она решалась за O(N+M) на запрос, O(N log M) декартовыми деревьями не пролазило. За O(N+M) решается такой структурой: для каждой ячейки будем хранить 2 неупорядоченные пары ссылок на ее соседей: для ссылки мы будем знать, в соседа по какой оси она ведет, но не будем знать, в положительном или отрицательном направлении. Вокруг матрицы будем иметь рамку фиктивных ячеек. Начиная от них, мы можем пройти и восстановить целую строку или столбец. Чтобы реверснуть подматрицу, нужно перекинуть ссылки только вдоль периметра подматрицы (тем не менее, до этого периметра сначала надо дойти от границы).
На Петрозаводских сборах разве что дьявола не вызывают.
Ну-ну. Бывает, смотришь на свой код и тебе кажется странным, что дьявол еще не здесь.
Наврал