Tin
Given an array of N numbers, you are required to process 3 types of queries:
get(L, R, x) — Determine how many elements in the segment of the array [L..R] are greater than or equal to x.
set(L, R, x) — Set all elements in the segment of the array [L..R] to the value x.
reverse(L, R) — Reverse the order of elements in the segment of the array [L..R].
Input
The input begins with the number N (1 ≤ N ≤ 10^5), followed by an array of N numbers. Next, you will receive the number of queries M (1 ≤ M ≤ 10^5), followed by M queries. The format of the queries can be inferred from the example provided. For all segments, it is guaranteed that 1 ≤ L ≤ R ≤ N. The initial numbers in the array and the numbers x in the queries are integers ranging from 0 to 10^9.
Output
For each query of type get, output the result.