Hiperquery

Time limit: 0.4s Memory limit: 256MB Input: hiperquery.in Output: hiperquery.out

Se dă un şir circular de numere naturale VV de lungime NN, indexat de la 11. Numerele din şir se află în intervalul închis [1,N][1, N], iar prima şi ultima poziţie sunt considerate adiacente.

Sunt definite următoarele operaţii:

  • Update XX YY: elementul de pe poziţia XX devine YY;
  • Rotate XX: roteşte spre dreapta şirul cu XX poziţii (şirul [1,2,3,4][1, 2, 3, 4] rotit cu o poziţie spre dreapta devine [4,1,2,3][4, 1, 2, 3]);
  • Query LL RR XX: câte numere din şir, din subsecvenţa VL,VL+1,,VRV_L, V_{L+1}, \dots, V_R sunt egale cu XX. Pot exista query-uri în care L>RL > R, caz în care vrem numărul de numere din VL,,VN,V1,,VRV_L, \dots, V_N, V_1, \dots, V_R care sunt egale cu XX.

Cerință

Dându-se şirul iniţial se cere să se proceseze un şir de operaţii dat.

Date de intrare

Pe prima linie a fişierului de intrare hiperquery.in se găseşte numărul NN.

Pe următoarea linie se află NN numere naturale care formează şirul VV.

Pe următoarea linie se află un număr MM urmat de MM linii pe care sunt descrise operaţiile date:

  • Pentru update: 1 X Y
  • Pentru rotire: 2 X
  • Pentru query: 3 L R X

Date de ieșire

În fişierul de ieşire hiperquery.out se vor găsi răspunsurile la întrebări, fiecare pe câte un rând.

Restricții și precizări

# Punctaj Restricții
1 10 1N,M1 0001 \leq N, M \leq 1\ 000
2 30 1N,M100 0001 \leq N, M \leq 100\ 000, nu există operații de tipul 1
3 30 1N,M100 0001 \leq N, M \leq 100\ 000, nu există operații de tipul 2
4 30 1N,M100 0001 \leq N, M \leq 100\ 000

Exemplu

hiperquery.in

4
4 1 3 1
6
3 2 4 1
3 3 1 4
3 3 2 1
1 1 2
2 2
3 1 1 3

hiperquery.out

2
1
2
1

Explicație

Pentru prima întrebare subsecvenţa este [4,1,3,1][4, 1, 3, 1].

Pentru a doua întrebare subsecvenţa este [4,1,3,1][4, 1, 3, 1].

Pentru a treia întrebare subsecvenţa este întreg şirul.

După primul update şirul devine [2,1,3,1][2,1,3,1].

Dupa rotire şirul devine [3,1,2,1][3,1,2,1].

Pentru ultima întrebare subsecvenţa este [3,1,2,1][3,1,2,1].

Log in or sign up to be able to send submissions!