Троє з Простоквашино 2#4492

Троє з Простоквашино 2

10 секунд
128 мегабайтів
Середня

- Матроскін, я навчився будувати дерево відрізків. - Шарик, краще б ти зробив нову будку, ніж займався такими дурницями. - Ну, Матроскін, я вже й Дядькові Федору показував код, можеш побачити в попередній задачі, а тобі покажу нову функцію — зміну.

int update(int v, int left, int right, int pos, int val) { if (left == right) t[v] = val; return 0; int mid = (left + right) / 2; if (pos <= mid) update(v * 2, left, mid, pos, val); else update(v * 2 + 1, mid + 1, right, pos, val); t[v] = max(t[v * 2], t[v * 2 + 1]); return 0;}

- Гаразд, Шарику, якщо ти вже написав функцію, слухай. Я дам тобі масив із невід'ємних чисел і набір запитів двох типів: якщо тип запиту дорівнює одиниці, буде дано число , і потрібно знайти такі два числа та (1 \leq l \leq r \leq n), щоб функція, викликана так

get_max(1, 1, n, l, r)

повернула значення, що дорівнює . Якщо таких пар кілька, виведи ту, де найменше . Якщо їх усе ще кілька, виведи з них ту, де менше . Якщо таких пар не існує, виведи рядок "Error". Якщо тип запиту дорівнює двом, далі слідують два числа , , і потрібно виконати функцію так

update(1, 1, n, x, y)

Чи впораєшся із цим завданням? Можеш вважати, що на самому початку була викликана функція

build(1, 1, n)

із попередньої задачі.

- Спробую, Матроскін.

Вхідні дані

Перший рядок містить одне число (1 \leq n \leq 10^6) — кількість елементів у масиві. У другому рядку розташовано невід'ємних чисел, що не перевищують 10^9 — елементи масиву. Далі записано число (1 \leq m \leq 10^5) — кількість запитів. А потім рядків, кожен з яких містить перше число — тип запиту, далі опис запиту, що складається з одного або двох чисел.

Вихідні дані

Для кожного запиту типу виведіть відповідь на задачу.

Приклади

Приклад 1

Loading
Loading