Задача №115411. Порядковая статистика

Вам дан массив \(a_1\), \(a_2\), \(\ldots\), \(a_n\), состоящий из целых чисел, а также целые числа \(k\) и \(m\). С массивом \(m\) раз производится следующая операция:

  • Выбрать \(i_1\), \(i_2\), \(\ldots\), \(i_k\) — позиции \(k\) наибольших элементов в массиве \(a\). При равенстве двух элементов большим считается элемент, стоящий в массиве на меньшей позиции.
  • Уменьшить \(a_{i_1}\), \(a_{i_2}\), \(\ldots\), \(a_{i_k}\) на \(1\).

Для \(x\) от \(1\) до \(n\), обозначим через \(F_{m,k}(x)\) значение \(x\)-й порядковой статистики в массиве, получаемом из \(a\) применением \(m\) раз операции с заданным параметром \(k\). Для \(x\) от \(1\) до \(n\), \(x\)-й порядковой статистикой массива \(a_1,a_2,\ldots,a_n\) называется элемент, который будет стоять на позиции \(x\), если массив \(a\) отсортировать в порядке неубывания.

Для всех \(l, r\), таких, что \(1 \le l \le r \le n\), обозначим через \(S_{m,k}(l,r)\) сумму \(F_{m,k}(x)\) по всем целым \(x\) от \(l\) до \(r\). Более формально: \(\) S_{m,k}(l,r)=\sum_{x=l}^r F_{m,k}(x) \(\) Вам даны целые числа \(m_0\) и \(k_0\). Вы должны вычислить для всех \(x\) от \(1\) до \(n\) значения \(F_{m_0,k_0}(x)\).

После этого вы должны обработать \(q\) запросов. \(j\)-й запрос (\(1 \le j \le q\)) может быть одного из трех типов:

  1. Вычислить значение \(F_{m_j,k_j}(x_j)\).
  2. Изменить значение \(a_{p_j}\) на \(v_j\).
  3. Вычислить значение \(S_{m_j,k_j}(l_j,r_j)\).

Все вычисления функций \(F\) и \(S\) производятся каждый раз независимо и не меняют массив. Все изменения массива в запросах второго типа сохраняются для следующих запросов.

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

Первая строка содержит четыре целых числа \(n\), \(m_0\), \(k_0\) и \(q\) (\(1 \le n \le 200\,000\), \(0 \le m_0 \le 10^9\), \(1 \le k_0 \le n\), \(0 \le q \le 200\,000\)) — длина массива \(a\); количество операций; количество наибольших элементов, уменьшаемых на каждой операции, и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1,\ a_2,\ \ldots,\ a_n\) (\(-10^9 \le a_i \le 10^9\), \(1 \le i \le n\)) — элементы массива \(a\).

В следующих \(q\) строках заданы запросы. В \(j\)-й из них в начале содержится число \(t_j\) (\(1 \le t_j \le 3\)) — тип \(j\)-го запроса.

  • Если \(t_j=1\), то далее строка содержит три целых числа \(m_j\), \(k_j\) и \(x_j\) (\(0 \le m_j \le 10^9\), \(1 \le k_j,x_j \le n\)) — параметры запроса первого типа.
  • Если \(t_j=2\), то далее строка содержит два целых числа \(p_j\) и \(v_j\) (\(1 \le p_j \le n\), \(-10^9 \le v_j \le 10^9\)) — параметры запроса второго типа.
  • Если \(t_j=3\), то далее строка содержит четыре целых числа \(m_j\), \(k_j\), \(l_j\) и \(r_j\) (\(0 \le m_j \le 10^9\), \(1 \le k_j,l_j,r_j \le n\), \(l_j \le r_j\)) — параметры запроса третьего типа.

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

В первой строке выведите \(n\) целых чисел \(F_{m_0,k_0}(1),F_{m_0,k_0}(2),\ldots,F_{m_0,k_0}(n)\).

Далее, для каждого запроса первого типа выведите в отдельной строке значение \(F_{m_j, k_j}(x_j)\), а для каждого запроса третьего типа значение \(S_{m_j,k_j}(l_j,r_j)\) — ответ на \(j\)-й запрос.

Примечание

В примере \(n=8\), \(m_0=3\), \(k_0=2\), \(q=16\). Изначально массив \(a\) равен \([3, 1, 2, -1, 0, 2, -1, 4]\). Посмотрим, как массив будет меняться, если применить к нему \(m_0\) раз операцию с параметром \(k_0\):

  1. Массив равен \([3,1,2,-1,0,2,-1,4]\). Два наибольших элемента стоят на позициях \(1\) и \(8\). Они уменьшаются на \(1\), после чего массив становится равен \([2,1,2,-1,0,2,-1,3]\).
  2. Массив равен \([2,1,2,-1,0,2,-1,3]\). Два наибольших элемента стоят на позициях \(1\) и \(8\). Они уменьшаются на \(1\), после чего массив становится равен \([1,1,2,-1,0,2,-1,2]\).
  3. Массив равен \([1,1,2,-1,0,2,-1,2]\). Два наибольших элемента стоят на позициях \(3\) и \(6\). Они уменьшаются на \(1\), после чего массив становится равен \([1,1,1,-1,0,1,-1,2]\).
Получаем, что после применения \(3\) раза операции с параметром \(2\) к массиву \(a\) он становится равен \([1,1,1,-1,0,1,-1,2]\). Если этот массив отсортировать, то получится массив \([-1,-1,0,1,1,1,1,2]\). Получаем, что порядковые статистики равны \(F_{3,2}(1)=-1\), \(F_{3,2}(2)=-1\), \(F_{3,2}(3)=0\), \(F_{3,2}(4)=1\), \(F_{3,2}(5)=1\), \(F_{3,2}(6)=1\), \(F_{3,2}(7)=1\), \(F_{3,2}(8)=2\).

В примере требуется обработать \(16\) запросов, разберем подробно первые \(10\) из них:

  1. Первый запрос имеет тип \(t_1=3\), параметры \(m_1=3\), \(k_1=2\), \(l_1=2\), \(r_1=6\) и требует вычислить значение \(S_{3,2}(2,6)\). Ранее мы уже вычислили значения \(F_{3,2}(x)\) для \(x\) от \(1\) до \(8\), откуда находим ответ на запрос: \(\) S_{3,2}(2,6)=F_{3,2}(2)+F_{3,2}(3)+F_{3,2}(4)+F_{3,2}(5)+F_{3,2}(6)= (-1)+0+1+1+1=2 \(\)
  2. Второй запрос имеет тип \(t_2=1\), параметры \(m_2=3\), \(k_2=2\), \(x_2=4\) и требует вычислить значение \(F_{3,2}(4)\). Его мы уже вычисляли, оно равно \(1\).
  3. Третий запрос имеет тип \(t_3=3\), параметры \(m_3=4\), \(k_3=5\), \(l_3=3\), \(r_3=5\) и требует вычислить значение \(S_{4,5}(3,5)\), то есть посчитать сумму порядковых статистик с третьей по пятую в массиве, полученном из \(a\) применением \(m_3=4\) раза операции с параметром \(k_3=5\). На момент третьего запроса массив \(a\) равен \([3, 1, 2, -1, 0, 2, -1, 4]\). Пять наибольших элементов стоят на позициях \(1,2,3,6,8\). Уменьшим их на \(1\), получим массив \([2,0,1,-1,0,1,-1,3]\). Применим операцию еще три раза, получим массив \([-1,-2,-2,-2,-1,-1,-1,0]\). После сортировки он равен \([-2,-2,-2,-1,-1,-1,-1,0]\). Получаем, что ответ на запрос равен \(\) S_{4,5}(3,5)=F_{4,5}(3)+F_{4,5}(4)+F_{4,5}(5)=(-2)+(-1)+(-1)=-4 \(\)
  4. Четвертый запрос имеет тип \(t_4=1\), параметры \(m_4=4\), \(k_4=5\), \(x_4=6\). После применения четырех операций с параметром \(5\) и сортировки массив \(a\) будет равен \([-2,-2,-2,-1,-1,-1,-1,0]\), поэтому шестая порядковая статистика равна \(-1\).
  5. Пятый запрос имеет тип \(t_5=2\), параметры \(p_5=5\) и \(v_5=-1\). Он меняет значение \(a_5\) на \(-1\), после чего массив \(a\) становится равен \([3,1,2,-1,-1,2,-1,4]\).
  6. Шестой запрос имеет тип \(t_6=2\), параметры \(p_6=6\) и \(v_6=3\). Он меняет значение \(a_6\) на \(3\), после чего массив \(a\) становится равен \([3,1,2,-1,-1,3,-1,4]\).
  7. Седьмой запрос требует найти значение \(F_{3,2}(1)\). Массив \(a\) на момент седьмого запроса равен \([3,1,2,-1,-1,3,-1,4]\). После применения \(3\) раза операции с параметром \(2\) он будет равен \([1, 1, 1, -1, -1, 2, -1, 2]\). Первая порядковая статистика этого массива равна \(-1\).
  8. Восьмой, девятый и десятый запросы требуют найти значения \(F_{3,2}(3)\), \(F_{3,2}(4)\) и \(F_{3,2}(8)\), то есть третью, четвертую и восьмую порядковые статистики в массиве \([1, 1, 1, -1, -1, 2, -1, 2]\). Они равны соответственно \(-1\), \(1\) и \(2\).

Система оценки

Тесты к этой задаче состоят из двенадцати групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов некоторых из предыдущих групп. Обратите внимание, что прохождение тестов из условия не требуется для некоторых групп. Offline-проверка означает, что результаты тестирования вашего решения на данной группе станут доступны только после окончания соревнования.

Если в подзадаче указаны ограничения на \(m\) или \(k\), то они распространяются как на \(m_0\) и \(k_0\), так и на параметры всех запросов первого и третьего типов.

Доп. ограничения
Группа Баллы \(n\) \(m\) \(k\) \(q\) Необх. группы Комментарий
0 0 Тесты из условия.
1 4 \(n \le 1000\) \(m \le 1000\) \(q=0\)
2 5 \(k=1\) \(q=0\)
3 6 \(k=1\) \(q \le 100\,000\) 2 \(t_j=1\) для всех запросов
4 7 \(k=1\) \(q \le 100\,000\) 2, 3 \(t_j \ne 3\) для всех запросов
5 11 \(k=2\) \(q=0\)
6 9 \(m \le 10^6\) \(q=0\) 1
7 10 \(n \le 1000\) \(q=0\) 1
8 7 \(q=0\) 1, 2, 5 – 7
9 11 \(q \le 100\,000\) 1 – 3, 5 – 8 \(t_j=1\) для всех запросов
10 13 \(q \le 100\,000\) 1 – 3, 5 – 9 \(t_j\ne 2\) для всех запросов
11 9 \(q \le 100\,000\) 0 – 10
12 8 0 – 11 Offline-проверка.
Примеры
Входные данные
8 3 2 16
3 1 2 -1 0 2 -1 4
3 3 2 2 6
1 3 2 4
3 4 5 3 5
1 4 5 6
2 5 -1
2 6 3
1 3 2 1
1 3 2 3
1 3 2 4
1 3 2 8
1 0 5 6
2 1 5
3 1 3 7 8
3 2 3 5 8
3 3 3 4 7
3 4 3 4 7
Выходные данные
-1 -1 0 1 1 1 1 2 
2
1
-4
-1
-1
-1
1
2
3
7
8
4
2
Сдать: для сдачи задач необходимо войти в систему