Добрий день всем!
Есть одно задача из E-Olymp Козленок, который учился считать.
У меня есть одна идея с Деревом отрезков но неполучается.
Пожалуста помогите решить эту задачу.
UPD: Задача решена код
Добрий день всем!
Есть одно задача из E-Olymp Козленок, который учился считать.
У меня есть одна идея с Деревом отрезков но неполучается.
Пожалуста помогите решить эту задачу.
UPD: Задача решена код
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | jiangly | 3810 |
| 2 | Benq | 3676 |
| 3 | Kevin114514 | 3655 |
| 4 | maroonrk | 3463 |
| 5 | strapple | 3390 |
| 6 | Um_nik | 3387 |
| 7 | tourist | 3384 |
| 8 | heuristica | 3322 |
| 9 | turmax | 3319 |
| 10 | jiangbowen | 3291 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 156 |
| 2 | nik_exists | 150 |
| 2 | maspy | 150 |
| 4 | Um_nik | 144 |
| 5 | Errichto | 139 |
| 6 | AmShZ | 138 |
| 7 | adamant | 137 |
| 8 | maroonrk | 133 |
| 9 | BledDest | 132 |
| 10 | qwexd | 129 |
| Название |
|---|



Будем в каждой вершине дерева отрезков хранить веса всех зверей данного поддерева. Известно, что для этого требуется O(NlogN) памяти, если N — размер исходного массива. Осталось понять, в какой структуре мы должны хранить элементы в каждой вершине.
При запросе второго типа мы просто пройдемся по всем вершинам, соответствующим данному индексу и изменим элемент в каждой из них (удалим старый, добавим новый). Значит, структура должна добавлять/удалять за O(1) или O(logN).
При запросе первого типа мы делаем запрос "два минимальных элемента на отрезке". Если мы делаем запрос на целом отрезке, то для этого достаточно посмотреть два минимума в данной вершине, иначе рекурсивно опросить левого и правого потомков. Значит, структура должна находить минимум за O(1) или O(logN).
Примером такой структуры является мультисет, сортированный по ключам. В C++ мультисет есть в стандартной библиотеке, если я не ошибаюсь; в Java его легко реализовать с помощью TreeMap.
Зачем все это? Просто храним два минимума на каждом отрезке и все.
Но можно и с одним минимумом — находим его, заменяем на бесконечность, находим новый минимум, возвращаем первый минимум на место.
Огромное спасибо вам!
Да, и в правду перемудрил, спасибо) Почему-то казалось, что если не хранить все элементы, то можно при обновлении упустить какие-то минимумы %)