Декартово дерево




Task
Time limit: 1000 ms,
Memory limit: 256 Mb

Вам дается массив a размера n и q запросов к нему. Есть запросы двух типов:
  • li ri — осуществить циклический сдвиг отрезка [li, ri] вправо. То есть, для каждого такого x, что li ≤ x < riax + 1 становится равным прежнему значению ax, а ali становится равным прежнему значению ari;
  • li ri — перевернуть отрезок [li, ri].
 
Необходимо вывести массив после обработки всех запросов.
 
Входные данные
В первой строке записаны два целых числа n и q (1 ≤ n, q ≤ 2·105).
Во второй строке записаны n целых чисел a1a2, ..., an (1 ≤ ai ≤ 109).
Дальше идут q строк. В i-й из них записаны три целых числа tiliri, где ti — тип i-го запроса, [li, ri] — отрезок, на котором запрос выполняется (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n).
 
Выходные данные
Выведите m чисел, i-е из которых равно числу на позиции bi после обработки всех запросов.

Ввод Вывод
6 3
1 2 3 4 5 6
2 1 3
2 3 6
1 1 6
1 3 2 6 5 4


(c) Курбатов Е., 2018

Auto CHOOSE THE PROGRAMMING NECESSARY LANGUAGE!
Attach the program source file:
or enter the source code in the language:

Rules for designing programs and a list of errors during automatic task verification
           

Results: