Se consideră un şir , iniţial vid. Asupra acestuia se efectuează patru operaţii:
- insert(): inserează în elementul e pe poziţia ;
- access(): întoarce elementul de pe poziţia ;
- reverse() : schimbă ordinea elementelor din secvenţa ;
- delete() : Şterge subsecvenţa .
Cerință
Se cere să se răspundă la toate operaţiile de tipul şi să se afişeze elementele secvenţei 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 dacă există operaţia reverse şi dacă nu există. Următoarele linii vor fi de patru tipuri, corespunzătoare fiecărei operaţii:
- : insert(), unde este un număr natural cuprins în intervalul iar un număr natural cuprins în intervalul .
- : acces(), unde .
- : reverse(), unde .
- : delete(), unde .
Cu 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 în ordinea în care apar în fişierul de intrare. Pe ultima linie se va tipări secvenţa după efectuarea tuturor operaţiilor.
Restricții și precizări
- Numărul operaţiilor insert nu va depăşi .
- Numărul total al operaţiilor nu va depăşi .
- Operaţia insert() va transforma secvenţa : în S’: .
- Operaţia reverse() va transforma secvenţa : în S’: .
- Operaţia delete() va transforma secvenţa : în S’: .
- Se garantează că operaţiile , şi nu se vor efectua asupra unei secvenţe vide.
- Pentru din teste numărul operaţiilor insert nu va depăşi iar numărul total al operaţiilor . Pentru aceste teste va exista operaţia reverse.
- Pentru încă 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: . Numerele subliniate sunt răspunsurile la operaţiile de tipul .