Se dă un şir circular de numere naturale de lungime , indexat de la . Numerele din şir se află în intervalul închis , iar prima şi ultima poziţie sunt considerate adiacente.
Sunt definite următoarele operaţii:
- Update : elementul de pe poziţia devine ;
- Rotate : roteşte spre dreapta şirul cu poziţii (şirul rotit cu o poziţie spre dreapta devine );
- Query : câte numere din şir, din subsecvenţa sunt egale cu . Pot exista query-uri în care , caz în care vrem numărul de numere din care sunt egale cu .
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 .
Pe următoarea linie se află numere naturale care formează şirul .
Pe următoarea linie se află un număr urmat de 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 | |
2 | 30 | , nu există operații de tipul 1 |
3 | 30 | , nu există operații de tipul 2 |
4 | 30 |
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 .
Pentru a doua întrebare subsecvenţa este .
Pentru a treia întrebare subsecvenţa este întreg şirul.
După primul update şirul devine .
Dupa rotire şirul devine .
Pentru ultima întrebare subsecvenţa este .