matrice

Time limit: 0.02s Memory limit: 16MB Input: matrice.in Output: matrice.out

Se dau NN şi MM două numere naturale şi o matrice AA cu NN linii (numerotate de la 11 la NN) şi MM coloane (numerotate de la 11 la MM) având elementele numere întregi în intervalul închis [30 000,30 000][-30 \ 000, 30 \ 000]. Asupra acestei matrice se pot efectua mai multe operaţii de ştergere a unor linii, de ordonare a elementelor aflate pe anumite linii sau de adăugare a unor noi linii la sfârşitul matricei. Fiecare dintre aceste operaţii este codificată printr-o comandă având următoarea sintaxă:

Ştergerea este precizată printr-o linie de forma: S i j k i1 o1 v1 i2 o2 v2 i3 o3 v3ik ok vkS \ i \ j \ k \ i_1 \ o_1 \ v_1 \ i_2 \ o_2 \ v_2 \ i_3 \ o_3 \ v_3 \dots i_k \ o_k \ v_k

Comanda precizează că se şterg din matrice acele linii L{i,i+1,i+2,,j}L \in \{i, i+1, i+2, \dots, j \} pentru care sunt îndeplinite simultan următoarele condiţii:

  • AL i1A_{L \ i_1} este în relaţia o1o_1 faţă de v1v_1
  • AL i2A_{L \ i_2} este în relaţia o2o_2 faţă de v2v_2
  • \dots
  • AL ikA_{L \ i_k} este în relaţia oko_k faţă de vkv_k

unde o1o_1, o2o_2, \dots, oko_k pot fi unul dintre operatorii < (mai mic), > (mai mare), ! (diferit), = (egal).

De exemplu comanda: S 3 5 2 2<10 5 ! 7S \ 3 \ 5 \ 2 \ 2 < 10 \ 5 \ ! \ 7 precizează că se şterg liniile L{3,4,5}L \in \{3, 4, 5 \} în cazul în care AL 2<10A_{L \ 2} < 10 şi AL 57A_{L \ 5} \neq 7.

După ştergerea tuturor liniilor precizate se va proceda la renumerotarea liniilor din matrice, iar dimensiunea matricii se va modifica.

Ordonarea este precizată printr-o linie de forma O i j t col1 ch1 col2 ch2 col3 ch3colt chtO \ i \ j \ t \ col_1 \ ch_1 \ col_2 \ ch_2 \ col_3 \ ch_3 \dots col_t \ ch_t cu semnificaţia că liniile i,i+1,i+2,,ji, i+1, i+2, \dots, j sunt sortate după valoarea din coloana col1col_1, dacă pentru două linii valoarea din coloana col1col_1 coincide se vor ordona după coloana col2col_2, apoi după coloana col3col_3 etc. Sortarea după o anumită coloană colicol_i se face crescător dacă chich_i este C respectiv descrescător dacă chich_i este D. Dacă două linii conţin valori identice în toate cele tt coloane, se va păstra ordinea relativă în care apar ele în tabela iniţială.

Adăugarea este precizată printr-o linie de forma A v1 v2vMA \ v_1 \ v_2 \dots v_M cu semnificaţia că se adaugă la sfârşitul matricei, după ultima sa linie, o linie nouă, elementele noii linii având pe rând, de la stânga la dreapta, valorile v1 v2vMv_1 \ v_2 \dots v_M.

Cerinţă

Scrieţi un program care citeşte elementele matricei iniţiale, apoi citeşte un şir de comenzi şi determină matricea rezultată după efectuarea operaţiilor precizate prin comenzile respective în ordinea în care acestea sunt date.

Date de intrare

Pe prima linie a fișierului de intrare matrice.in se găsesc două numere întregi, aa și bb.

Date de ieșire

Fişierul de ieşire matrice.out va conţine pe prima linie un număr natural RR reprezentând numărul de linii al matricei finale. Pe fiecare dintre următoarele RR linii se află câte MM numere întregi, reprezentând elementele matricei finale. Elementele de pe aceeaşi linie sunt separate prin câte un spaţiu.

Restricții și precizări

  • 1N,R2001 \leq N, R \leq 200
  • 1M1001 \leq M \leq 100
  • 1P1501 \leq P \leq 150
  • Niciuna dintre matricele intermediare nu au mai mult de 200200 de linii
  • Numărul maxim de condiţii pentru orice comandă de ştergere sau de ordonare este de 2020 (1k,t201 \leq k, t \leq 20)
  • Toate comenzile din fişierul de intrare sunt corecte atât din punct de vedere sintactic dar şi din punct de vedere logic, adică nu se cere de exemplu sortarea sau ştergerea unor linii din afara matricei.

Exemplu

matrice.in

10 4
5 1 6 3
4 2 3 7
4 2 3 2
2 8 1 3
4 2 1 6
1 3 2 1
9 7 5 1
9 7 3 8
3 8 2 6
6 7 1 3
8
O 2 5 1 3 C
O 7 10 1 2 C
S 5 9 1 1 < 4
A 7 3 5 1
A 9 2 1 6
O 2 7 3 2 C 1 D 4 D
O 1 11 1 3 C
S 1 11 2 1 > 4 3 ! 5

matrice.out

7
4 2 1 6
2 8 1 3
3 8 2 6
4 2 3 7
4 2 3 2
9 7 5 1
7 3 5 1

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