secv

Time limit: 2s Memory limit: 64MB Input: secv.in Output: secv.out

Se consideră un şir SS, iniţial vid. Asupra acestuia se efectuează patru operaţii:

  1. insert(k,ek, e): inserează în SS elementul e pe poziţia kk;
  2. access(kk): întoarce elementul de pe poziţia kk;
  3. reverse(i,ji, j) : schimbă ordinea elementelor din secvenţa S[i  j]S[i \ \dots \ j];
  4. delete(i,ji, j) : Şterge subsecvenţa S[i  j]S[i \ \dots \ j].

Cerință

Se cere să se răspundă la toate operaţiile de tipul 22 şi să se afişeze elementele secvenţei SS după efectuarea tuturor operaţiilor.

Date de intrare

Pe prima linie a fişierului de intrare secv.in se vor găsi două numere naturale, primul reprezentând numărul operaţiilor din fişier, iar al doilea va fi 11 dacă există operaţia reverse şi 00 dacă nu există. Următoarele linii vor fi de patru tipuri, corespunzătoare fiecărei operaţii:

  1. I k eI \ k \ e: insert(k,ek, e), unde ee este un număr natural cuprins în intervalul [0,109][0, 10^9] iar kk un număr natural cuprins în intervalul [1,n+1][1, n+1].
  2. A kA \ k: acces(kk), unde 1kn1 \leq k \leq n.
  3. R i jR \ i \ j: reverse(i,ji, j), unde 1ijn1 \leq i \leq j \leq n.
  4. D i jD \ i \ j: delete(i,ji, j), unde 1ijn1 \leq i \leq j \leq n.
    Cu nn am notat lungimea secvenţei.

Date de ieșire

În fişierul de ieşire secv.out se vor tipări pe câte un rând răspunsurile operaţiilor de tipul 22 în ordinea în care apar în fişierul de intrare. Pe ultima linie se va tipări secvenţa SS după efectuarea tuturor operaţiilor.

Restricții și precizări

  • Numărul operaţiilor insert nu va depăşi 250 000250 \ 000.
  • Numărul total al operaţiilor nu va depăşi 750 000750 \ 000.
  • Operaţia insert(k,ek, e) va transforma secvenţa SS: s1 s2sksns_1 \ s_2 \dots s_k \dots s_n în S’: s1 s2e sksns_1 \ s_2 \dots e \ s_k \dots s_n.
  • Operaţia reverse(i,ji, j) va transforma secvenţa SS: s1si1 si si+1sj1 sj sj+1sns_1 \dots s_{i-1} \ s_i \ s_{i+1} \dots s_{j-1} \ s_j \ s_{j+1} \dots s_n în S’: s1si1 sj sj+1si+1 si sj+1sns_1 \dots s_{i-1} \ s_j \ s_{j+1} \dots s_{i+1} \ s_i \ s_{j+1} \dots s_n.
  • Operaţia delete(i,ji, j) va transforma secvenţa SS: s1si1 si si+1sj1 sj sj+1sns_1 \dots s_{i-1} \ s_i \ s_{i+1} \dots s_{j-1} \ s_j \ s_{j+1} \dots s_n în S’: s1si1 sj+1sns_1 \dots s_{i-1} \ s_{j+1} \dots s_n.
  • Se garantează că operaţiile 22, 33 şi 44 nu se vor efectua asupra unei secvenţe vide.
  • Pentru 15%15\% din teste numărul operaţiilor insert nu va depăşi 35 00035 \ 000 iar numărul total al operaţiilor 100 000100 \ 000. Pentru aceste teste va exista operaţia reverse.
  • Pentru încă 25%25\% din teste operaţia reverse nu se va regăsi.

Exemplu

secv.in

13 1
I 1 1
I 2 2
I 3 3
R 2 3
I 4 4
I 3 5
A 4
R 1 3
D 2 3
A 3
I 2 1
R 1 3
D 3 3

secv.out

2
4
2 1 4

Explicație

Secvenţa S devine succesiv: (1),(1 2),(1 2 3),(1 3 2),(1 3 2 4),(1 3 5 2 4),(5 3 1 2 4),(5 2 4),(5 1 2 4),(2 1 5 4),(2 1 4)(1), (1 \ 2), (1 \ 2 \ 3), (1 \ 3 \ 2), (1 \ 3 \ 2 \ 4), (1 \ 3 \ 5 \ \underline{2} \ 4), (5 \ 3 \ 1 \ 2 \ 4), (5 \ 2 \ \underline{4}), (5 \ 1 \ 2 \ 4), (2 \ 1 \ 5 \ 4), (2 \ 1 \ 4). Numerele subliniate sunt răspunsurile la operaţiile de tipul 22.

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