Условие задачи | | Прогресс |
Темы:
Дерево отрезков, RSQ, RMQ
Реализуйте структуру данных для эффективного вычисления сумм подряд идущих элементов массива.
Входные данные
В первой строке вводится одно натуральное число N (1 ≤ N ≤ 100000) — количество чисел в массиве.
Во второй строке вводятся N чисел от 1 до 100000 — элементы массива.
В третьей строке вводится одно натуральное число K (1 ≤ K ≤ 30000) — количество запросов на вычисление суммы.
В следующих K строках вводится по два числа — номера левого и правого элементов отрезка массива (считается, что элементы массива нумеруются с единицы).'
Выходные данные
Для каждого запроса выведите сумму чисел соответствующего участка массива. Числа выводите в одну строку через пробел.
Ввод |
Вывод |
5
4 4 8 7 8
2
1 2
1 3 |
8 16 |
| |
|
Темы:
Дерево отрезков, RSQ, RMQ
Реализуйте эффективную структуру данных, позволяющую изменять элементы массивы и вычислять НОД нескольких подряд идущих элементов.
Входные данные
В первой строке вводится одно натуральное число N (1 ≤ N ≤ 100000) — количество чисел в массиве.
Во второй строке вводятся N чисел от 0 до 100000 — элементы массива.
В третьей строке вводится одно натуральное число M (1 ≤ M ≤ 30000) — количество запросов.
Каждая из следующих M строк представляет собой описание запроса. Сначала вводится одна буква, кодирующая вид запроса (s — вычислить НОД, u — обновить значение элемента).
Следом за s вводятся два числа — номера левой и правой границы отрезка.
Следом за u вводятся два числа — номер элемента и его новое значение.
Выходные данные
Для каждого запроса s выведите результат. Все числа выводите в одну строку через пробел.
Ввод |
Вывод |
5
2 8 4 16 12
5
s 1 5
s 4 5
u 3 32
s 2 5
s 3 3 |
2 4 4 32 |
| |
|
Темы:
Дерево отрезков, RSQ, RMQ
sqrt декомпозиция
Реализуйте структуру данных для эффективного вычисления максимумов подряд идущих элементов массива.
Входные данные
В первой строке вводится одно натуральное число N (\(1 <= N <= 100000\)) — количество чисел в массиве. Во второй строке вводятся N чисел от 1 до 100000 — элементы массива. В третьей строке вводится одно натуральное число K (\(1 <= K <= 30000\)) — количество запросов на вычисление максимума. В следующих K строках вводится по два числа — номера левого и правого элементов отрезка массива (считается, что элементы массива нумеруются с единицы).
Выходные данные
Для каждого запроса выведите значение максимального элемента на указанном отрезке массива. Числа выводите в одну строку через пробел.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
5
2 2 2 1 5
2
2 3
2 5 |
2 5 |
| |
|
Темы:
Дерево отрезков, RSQ, RMQ
Из N коров выбирается делегация (1≤N≤2⋅105). Они стоят в ряд, корова i имеет породу bi.
Делегация будет состоять из непрерывного участка коров не менее трёх, то есть коровы l…r для целых l и r удовлетворяющих условиям 1≤l<r≤N и r−l≥2. Три коровы в выбранном интервале помечаются как лидеры делегации. Две граничные коровы обязательно должны быть лидерами. Кроме того, каждый лидер должен иметь породу отличную от всех остальных коров в делегации (лидеры или не лидеры).
Определите количество способов которыми можно выбрать делегацию. Две делегации рассматриваются различными, если у них отличаются члены или лидеры.
Входные данные:
Первая строка содержит N.
Вторая строка содержит N целых чисел b1,b2,…,bN, каждое в интервале [1,N].
Выходные данные:
Количество возможных делегаций на одной строке.
Примеры
№ |
Входные данные |
Выходные данные |
Пояснение |
1 |
7
1 2 3 4 3 2 5 |
9 |
Каждая делегация соответствует одному из следующих триплетов лидеров:
(1,2,3),(1,2,4),(1,3,4),(1,4,7),(2,3,4),(4,5,6),(4,5,7),(4,6,7),(5,6,7). |
| |
|
Темы:
Алгоритмы сортировки
Дерево отрезков, RSQ, RMQ
Жадный алгоритм
Джек нашел N камней и упорядочил их в порядке возрастания их массы. Массы всех камней различны. Самый легкий камень получил номер 1, следующий ≤ 2 и так далее, самый тяжелый получил номер N.
У Джека есть чашечные весы и он решил положить все камни на них в каком-то порядке. Известен порядок, в котором он будет класть камни, и какой камень на какую чашу попадет.
Ваша задача — определить состояние весов после добавления каждого камня. Точные массы камней не известны — даются только их номера.
Входные данные
Первая строка содержит целое число N (1 N ≤ 100000).
Каждая из следующих N строк содержит по два целых числа: R (1 ≤ R ≤ N) и S (1 ≤ S ≤ 2). R - номер камня, который будет положен на чашу S. Все R будут различны.
Выходные данные
Выведите N строк - по одной для каждого камня. Если после добавления соответствующего камня чаша 1 тяжелее, выведите “<”. Если сторона 2 тяжелее, выведите “>”. Если невозможно определить, в каком состоянии будут весы, выведите “?”.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
5
1 2
3 1
2 1
4 2
5 1 |
<
>
>
?
>
|
| |
|
Темы:
Динамическое программирование: один параметр
Динамическое программирование
Дерево отрезков, RSQ, RMQ
Дерево Фенвика
Назовем подпоследовательностью массива a непустой массив b такой, что он может быть получен из массива a удалением нескольких (возможно, никаких) элементов массива a. Например, массив [1,3] является попоследовательностью массива [1,2,3] , но [3,1] не является.
Назовем подотрезком массива a непустой массив b такой, что он может быть получен путем удаления нескольких (возможно, никаких) первых и последних элементов массива a. Например, [1,2] является подотрезком массива [1,2,3] , а [1,3] не является. Несложно заметить, что у массива длины n ровно \( {n(n+1) \over 2}\) подотрезков.
Назовем массив a длины n возрастающим , если для любого 1 ≤ i ≤ n выполняется ai ≤ ai+1.
Монотонностью массива назовем количество его возрастающих подотрезков.
Дан массив a длины n. Посчитайте сумму монотонностей по всем его подпоследовательностям. Так как ответ может быть очень большим, выведите его по модулю 109+7.
Входные данные
В первой строке задано целое число n (1 ≤ n ≤ 200000) — длина массива a.
Во второй строке заданы n целых чисел (1 ≤ ai ≤ 200000) — элементы массива a.
Выходные данные
Выведите одно целое число — сумму монотонностей всех подпоследовательностей по модулю 109+7.
Примечание
В первом тестовом примере у массива есть 7 подпоследовательностей:
- У массива [1] есть ровно один подотрезок и он является возрастающим.
- У массива [2] есть ровно один подотрезок и он является возрастающим.
- У массива [3] есть ровно один подотрезок и он является возрастающим.
- У массива [1,2] есть три подотрезка ([1], [2], [1,2] ) и все они являются возрастающими.
- У массива [1,3] есть три подотрезка ([1], [3], [1,3] ) и все они являются возрастающими.
- У массива [3,2] есть три подотрезка ([3], [2], [3, 2] ), но только два из них ([3] и [2] ) являются возрастающими.
- У массива [1,3,2] есть шесть подотрезков ([1], [3], [2], [1,3], [3,2], [1,3,2] ) и четыре из них ([1], [3], [2], [1,3] ) являются возрастающими.
Во втором тестовом примере все возрастающие подотрезки всех подпоследовательностей имеют длину 1.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
3
1 3 2 |
15 |
2 |
3
6 6 6 |
12 |
| |
|
Темы:
Дерево отрезков, RSQ, RMQ
sqrt декомпозиция
Хеш
Суффиксный массив
Динамическое программирование
Хеш
Скажем, что последовательность строк t1 , ..., tk является путешествием длины k , если для всех i > 1 ti является подстрокой ti - 1 строго меньшей длины. Например, { ab , b } является путешествием, а { ab , c } или { a , a } — нет.
Определим путешествие по строке s как путешествие t1 , ..., tk , все строки которого могут быть вложены в s так, чтобы существовали (возможно, пустые) строки u1 , ..., uk + 1 , такие, что s = u1t1u2 t2 ... uk tk uk + 1 . К примеру, { ab , b } является путешествием по строке для abb , но не для bab , так как соответствующие подстроки расположены справа налево.
Назовём длиной путешествия количество строк, из которых оно состоит. Определите максимально возможную длину путешествия по заданной строке s .
Входные данные
В первой строке задано целое число n ( 1 ≤ n ≤ 500 000 ) — длина строки s .
Во второй строке содержится строка s , состоящая из n строчных английских букв.
Выходные данные
Выведите одно число — наибольшую длину путешествия по строке s .
Примечание
В первом примере путешествием по строке наибольшей длины является { abcd , bc , c } .
Во втором примере подходящим вариантом будет { bb , b } .
Примеры
№ |
Входные данные |
Выходные данные |
1 |
7
abcdbcc |
3 |
2 |
4
bbcb |
2 |
| |
|
Темы:
meet in the middle
Дерево отрезков, RSQ, RMQ
Дочь короля Флатландии собирается выйти за прекрасного принца.
Принц хочет подарить принцессе сокровища, но он не уверен какие именно бриллианты из своей коллекции выбрать.
В коллекции принца n бриллиантов, каждый характеризуется весом wi и стоимостью vi.
Принц хочет подарить наиболее дорогие бриллианты, однако король умен и не примет бриллиантов суммарного веса больше R. С другой стороны, принц будет считать себя жадным всю оставшуюся жизнь, если подарит бриллиантов суммарным весом меньше L.
Помогите принцу выбрать набор бриллиантов наибольшей суммарной стоимости, чтобы суммарный вес был в отрезке [L, R].
Входные данные:
Первая строка содержит число n (1 <= n <= 32), L и R (0 <= L <= R <= 1018).
Следующие n строк описывают бриллианты и содержат по два числа - вес и стоимость соответствующего бриллианта (1 <= wi, vi <= 1015).
Выходные данные:
Первая строка вывода должна содержать k - количество бриллиантов, которые нужно подарить принцессе.
Вторая строка должна содержать номера даримых бриллиантов.
Бриллианты нумеруются от 1 до n в порядке появление во входных данных.
Если составить подарок принцессе невозможно, то выведите 0 в первой строке вывода.
Примеры:
Входные данные |
Выходные данные |
3 6 8
3 10
7 3
8 2 |
1
2 |
| |
|
Темы:
Динамическое программирование
Дерево отрезков, RSQ, RMQ
Вам дан массив из n целых чисел. Вам необходимо разделить его на k непустых подотрезков (последовательность подряд идущих элементов) так, чтобы:
1) Каждый элемент массива входил ровно в один подотрезок.
2) Если для каждого подотрезка выбрать минимальное в нем число, то сумма всех минимумов должна быть максимально возможной.
Сообщите сумму минимумов значений в подотрезках этого разбиения.
Входные данные:
В первой строке дается два натуральных числа - n (1 <= n <= 500) и k (1 <= k <= n).
Во второй строке дается n целых чисел - элементы массива ai (1 <= ai <= 105).
Выходные данные:
Выведите одно число - ответ на задачу.
Пример:
Входные данные |
Выходные данные |
5 3
4 2 5 1 3 |
8 |
Пояснение:
Одно из подходящих разбиений: [4, 2], [5], [1, 3]. Сумма минимумов в каждом подотрезке равна 2 + 5 + 1 = 8.
| |
|
Темы:
Алгоритм Мо
Дерево отрезков, RSQ, RMQ
Дана перестановка из n элементов.
Ответьте на m запросов про число инверсий для подотрезка перестановки от l до r.
Инверсией называется пара индексов i, j такая, что i < j и ai > aj, где ai - это i-й элемент перестановки.
Входные данные:
В первой строке задано число n (1 <= n <= 105).
Во второй строке задана перестановка из n элементов (элементы перестановки - попарно различные целые числа от 1 до n).
В третьей строке задано число m (1 <= m <= 105).
В последующих m строках содержится по два числа l и r - границы запроса (1 <= l, r <= n).
Выходные данные:
Выведите m строк - ответы на данные запросы.
Примеры:
Входные данные |
Выходные данные |
5
4 5 2 3 1
3
1 3
3 5
1 5 |
2
2
8 |
6
5 2 4 3 1 6
3
4 6
2 5
1 5 |
1
4
8 |
| |
|