№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Название |
---|
Так в разборе же всё написано. Попробую обяснить немного подробнее. В каждый момент времени у тебя есть logN объектов структур, каждый из которых имеет размер порядка 2L, где L — порядковый номер структуры. Когда к нам пуступает запрос get — мы его перенаправляем во все экземпляры структур. Когда же запрос вида add — добавляем в структуру с номером 0. Размер структуры сразу станет ≥ 20 — мы её очищаем, а перед этим объединяем её со структурой с номером 1. Если структура с номером 1 достигла размера 21 — проделываем ту же процедуру, пока не получим валидные размеры структур (sizeof(structi) < 2i). Чем больше структура — тем реже мы будем её обновлять.
(Из разбора) Легко видеть, что каждая строка перебросится не более logm раз и на каждый запрос мы умеем отвечать за O(logm).
В разборе было не очень понятно написано, после подробностей всё разъяснилось, спасибо. Если на то пошло, то не могли бы вы ответить на ещё один мой вопрос на счёт Ахо-Корасика? Если не нужно находить все вхождения, а только их количество, разве обязательно идти по сжатым суффиксным ссылкам и проверять кол-во переходов? Не легче завести переменную в каждой вершине, где будет написано кол-во терминальных вершин на пути к корню, если проходить по суффиксным ссылкам? Если можно, есть какие-нибудь подводные камни?
А о каких сжатых ссылках и количестве переходов вообще идёт речь?
Речь о сжатых суффиксных ссылках (ближайшая терминальная вершина, достижимая из суффиксных ссылок) и количестве терминальных вершин при переходе по сжатым суффиксным ссылкам до корня
Ну, конечно, нужно ввести такую переменную, а не ходить до корня каждый раз.
Об этом явно говорится в следующем абзаце там же. Попробую описать общую идею более подробно.
Пусть у нас есть некая структура, которую можно построить на N объектах за O(N) и потом с её помощью отвечать на запросы, но добавление эта структура не поддерживает. Для того, чтобы поддерживать добавление, будем хранить не одну копию структуры, а несколько, размером в различные степени двойки. Например, если N=10, у нас будут структуры размером 2 и 8.
Теперь добавление одного элемента похоже на прибавление единицы в двоичной системе счисления. Добавим в наше множество структуру размера 1, содержащую новый элемент; если в результате этого появилось две структуры размера 1, построим (за сумму размеров) структуру размера 2; если их теперь тоже две, повторим, пока требуется.
Можно показать, что это даст не более логарифма оверхеда: каждый элемент будет участвовать в построении на не более чем log n уровнях.
Спасибо, теперь всё ясно.