culori

Time limit: 1s Memory limit: 10MB Input: culori.in Output: culori.out

Muncitorii de la cooperativa “Munca-n zadar” au la dispoziţie o ţeavă cu lungimea de NN metri. Iniţial această ţeavă are culoarea CC. Muncitorii pot tăia o bucată de ţeavă în două bucăţi de lungimi întregi şi revopsi cele două bucăţi. Muncitorii pot să se şi răzgândească şi să sudeze la loc două bucăţi înapoi în bucata mare din care au fost
despărţite şi să o revopsească cu culoarea pe care o avea înainte de tăiere. Prin tăiere sau sudare bucăţile de ţevi nu se mută din locul lor iniţial şi deci o bucată de ţeavă poate fi identificată prin poziţia ei. Poziţia unei bucăţi de ţeavă este specificată prin distanţa dintre începutul ţevii iniţiale şi începutul bucăţii de ţeavă exprimată în metri.

Cerință

Lucraţi la această cooperativă şi trebuie să scrieţi un program care implementează următoarele comenzi:

  • SPLIT(P, L, CL, CR) – bucata de ţeavă care începe la poziţia PP va fi împărţită în două bucăţi mai mici, cea din stânga având mărimea L. Apoi bucata din stânga va fi colorată cu culoarea CLCL şi cea din dreapta cu culoarea CRCR. Se garantează că 0<L<0 < L < lungimea bucăţii de ţeavă care trebuie împărţită.
  • UNDO(P) – bucata care începe la poziţia PP se va resuda cu bucata imediat din dreapta ei. Se garantează că în momentul apelării acestei comenzi bucata imediat din dreapta ei este cea obţinută prin aceeaşi operaţie de tăiere în urma căreia a rezultat bucata de la poziţia PP (chiar dacă se poate ca oricare dintre cele două bucăţi să fi fost tăiate şi resudate). Bucata rezultată se va recolora în culoarea pe care o avea înainte de tăiere.
  • GETCOLOR(P) – se afişează culoarea bucăţii care începe la poziţia PP.

Pentru toate comenzile, va exista o bucată de ţeavă care să înceapă la poziţia PP.

Date de intrare

Fişierul culori.in conţine pe prima linie numerele N,CN, C şi MM, separate printr-un spaţiu. Fiecare dintre următoarele MM linii conţine o comandă. Comenzile sunt codificate astfel:

Comanda Codificare în fişierul de intrare
SPLIT(P,L,CL,CR) 2 P L CL CR
UNDO(P) 1 P
GETCOLOR(P) 0 P

Date de ieșire

Fişierul culori.out va conţine atâtea linii câte comenzi GETCOLOR sunt, reprezentând culorile respective, în ordinea comenzilor GETCOLOR corespunzătoare.

Restricții și precizări

  • 1N524 288 (219)1 \leq N \leq 524 \ 288 \ (2^{19})
  • 1M2 000 0001 \leq M \leq 2 \ 000 \ 000
  • Toate culorile au valori cuprinse între 00 şi 255255 (inclusiv)
  • Poziţiile vor fi numere întregi între 00 la N1N-1 (inclusiv)

Exemplul 1

culori.in

11 3 13
2 0 8 1 3
1 0
2 0 10 3 0
0 0
2 0 9 1 1
2 0 8 2 3
1 0
2 0 5 2 3
1 0
2 0 5 3 2
0 9
1 0
0 0

culori.out

3
1
1

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