Skip to content

Files

Latest commit

 

History

History
 
 

hw7

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Запросы на отрезках

A. Сумма простая

Ограничение по времени на тест: 1 секунда

Ограничение по памяти на тест: 512 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Вам нужно научиться отвечать на запрос «сумма чисел на отрезке».

Массив не меняется. Запросов много. Отвечать на каждый запрос следует за O(1).

Входные данные

Размер массива — n и числа x, y, a0 , порождающие массив a: ai= (x * a{i-1} + y) mod 2^16 Далее следует количество запросовmи числа z, t, b0, порождающие массив b: bi = (z * {_bi-1} + t) mod 2^30.

Массив c строится следующим образом: ci =bi mod n. Запросы: i-й из них — найти сумму на отрезке от min(c2i; c2{i+1}) до max(c2i; c2{i+1}) в массиве a. Ограничения: 1 ⩽ n ⩽ 10^7 , 0 ⩽ m ⩽ 10^7. Все числа целые от 0 до 2^16. t может быть равно -1.

Выходные данные

Выведите сумму всех сумм.

Пример

Входные данные

3 1 2 3
3 1 -1 4

Выходные данные

23 

Примечание

a = {3, 5, 7}, b = {4, 3, 2, 1, 0, 2^30 - 1}, c = {1, 0, 2, 1, 0, 0}, запросы = {[0;1], [1;2], [0;0]}, суммы = {8, 12, 3}.

B. Разреженные таблицы

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Дан массив из n чисел. Требуется написать программу, которая будет отвечать на запросы следующего вида: найти минимум на отрезке между u и v включительно.

Входные данные

В первой строке заданы три натуральных числа n, m ( 1 ⩽ n ⩽ 10^5 , 1 ⩽ m ⩽ 10^7 ) и a1 ( 0 ⩽ a1 < 16 714 589) — количество элементов в массиве, количество запросов и первый элемент массива соответственно. Вторая строка содержит два натуральных числа u1 и v1 ( 1 ⩽ u1 ; v1n) — первый запрос.

Для того, чтобы размер ввода был небольшой, массив и запросы генерируются.

Элементы a2, a3,..., an задаются следующей формулой:

ai+1 = (23 * ai + 21563) mod 16714589.

Например, при n = 10, a1 = 12345 получается следующий массив: a = ( 12345, 305498, 7048017, 11694653, 1565158, 2591019, 9471233 , 570265, 13137658, 1325095).

Запросы генерируются следующим образом:

ui+1 = ((17 * ui + 751 + ri + 2i) mod n) + 1,

vi+1 = ((13 * vi + 593 + ri + 5i) mod n) + 1,

где ri — ответ на запрос номер i.

Обратите внимание, что ui может быть больше, чем vi.

Выходные данные

В выходной файл выведите um, vm и rm (последний запрос и ответ на него).

Примеры

Входные данные

10 8 12345
3 9

Выходные данные

5 3 1565158

C. RSQ

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Входные данные

В первой строке находится число n — размер массива. ( 1 ⩽ n ⩽ 500,000) Во второй строке находится n чисел ai — элементы массива. Далее содержится описание операций, их количество не превышает 1,000,000. В каждой строке находится одна из следующих операций:

  • set i x — установить a[i] в x.

  • sum i j — вывести значение суммы элементов в массиве на отрезке сi по j, гарантируется, что ( 1 ⩽ ijn).

Все числа во входном файле и результаты выполнения всех операций не превышают по модулю 10^18.

Выходные данные

Выведите последовательно результат выполнения всех операций sum. Следуйте формату выход- ного файла из примера.

Пример

Входные данные

5
1 2 3 4 5
sum 2 5
sum 1 5
sum 1 4
sum 2 4
set 1 10
set 2 3
set 5 2
sum 2 5
sum 1 5
sum 1 4
sum 2 4

Выходные данные

14
15
10
9
12
22
20
10

D. RMQ2

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Входные данные

В первой строке находится число n — размер массива. ( 1 ⩽ n ⩽ 10^5 ) Во второй строке находится n чисел ai — элементы массива. Далее содержится описание операций, их количество не превышает 2 * 10^5. В каждой строке находится одна из следующих операций:

  • set i j x — установить все a[k], ikj в x.

  • add i j x — увеличить все a[k], ikj на x.

  • min i j — вывести значение минимального элемента в массиве на отрезке сi по j, гарантируется, что ( 1 ⩽ ijn).

Все числа во входном файле и результаты выполнения всех операций не превышают по модулю 10^18.

Выходные данные

Выведите последовательно результат выполнения всех операций min. Следуйте формату выход ного файла из примера.

Пример

Входные данные

5
1 2 3 4 5
min 2 5
min 1 5
min 1 4
min 2 4
set 1 3 10
add 2 4 4
min 2 5
min 1 5
min 1 4
min 2 4

Выходные данные

2
1
1
2
5
5
8
8

Решение

E. RMQ наоборот

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: rmq.in

вывод: rmq.out

Рассмотрим массив a[1..n]. Пусть Q(i, j) — ответ на запрос о нахождении минимума среди чисел a[i],..., a[j]. Вам даны несколько запросов и ответы на них. Восстановите исходный массив.

Входные данные

Первая строка входного файла содержит число n — размер массива, и m — число запросов ( 1 ⩽ n, m ⩽ 100 000). Следующие m строк содержат по три целых числа i, j и q, означающих, что Q(i, j) = q( 1 ⩽ _i_⩽ jn, -2^31 ⩽ q ⩽ 2^31-1 ).

Выходные данные

Если искомого массива не существует, выведите строку «inconsistent». В противном случае в первую строку выходного файла выведите «consistent». Во вторую стро- ку выходного файла выведите элементы массива. Элементами массива должны быть целые числа в интервале от -2^31 до 2^31-1 включительно. Если решений несколько, выведите любое.

Примеры

Входные данные

3 2
1 2 1
2 3 2

Выходные данные

consistent
1 2 2

Входные данные

3 3
1 2 1
1 1 2
2 3 2

Выходные данные

inconsistent