Muncitorii de la cooperativa “Munca-n zadar” au la dispoziţie o ţeavă cu lungimea de metri. Iniţial această ţeavă are culoarea . 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 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 şi cea din dreapta cu culoarea . Se garantează că lungimea bucăţii de ţeavă care trebuie împărţită.UNDO(P)– bucata care începe la poziţia 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 (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 .
Pentru toate comenzile, va exista o bucată de ţeavă care să înceapă la poziţia .
Date de intrare
Fişierul culori.in conţine pe prima linie numerele şi , separate printr-un spaţiu. Fiecare dintre următoarele 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
- Toate culorile au valori cuprinse între şi (inclusiv)
- Poziţiile vor fi numere întregi între la (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