Librărie

Time limit: 0.5s Memory limit: 128MB Input: librarie.in Output: librarie.out

Andrei este managerul unei librării care dorește să mențină o evidență exactă a prețurilor cărților din inventar. Emanuel, administratorul librăriei, implementează planuri de marketing care implică modificări repetate ale prețurilor (operații de modificare de preț), iar deciziile sale se pot schimba ulterior. Pentru a maximiza profitul obținut în funcție de cerere, în fiecare zi, Emanuel efectuează o serie de operații (modificări, anulări și refaceri), iar la sfârșitul fiecărei zile, Andrei trebuie să vadă starea finală a prețurilor din librărie.

Date de intrare

Fișierul librarie.in conține:

  • Linia 11: Un număr natural nn, numărul de cărți din librărie (numerotate de la 11 la nn).
  • Linia 22: nn numere naturale, prețurile inițiale ale cărților.
  • Linia 33: Un număr natural QQ, numărul de zile.
  • Pentru fiecare din cele QQ zile:
    • O linie cu un număr natural tt, numărul de operații din ziua respectivă.
    • Următoarele tt linii, fiecare descriind o operație.

Tipuri de operații:

  • Modificare preț: op index1 index2 număr
    op este fie + (adaugă număr la prețurile cărților de la index1 la index2 inclusiv), fie - (scade număr din prețurile cărților de la index1 la index2 inclusiv).
  • Undo: uu — anulează ultima operație de modificare neanulată (dacă există).
  • Redo: rr — reface ultima operație anulată care nu a fost refăcută (dacă există).

Date de ieșire

Fișierul librarie.out va conține QQ linii. Fiecare linie va conține, starea finală a prețurilor cărților la sfârșitul zilei respective, separate prin spații.

Restricții și precizări

  • 1n1051 \leq n \leq 10^5
  • 1Q1001 \leq Q \leq 100
  • 00 \leq prețurile inițiale 109\leq 10^9
  • Pentru fiecare zi, 1t<1051 \leq t < 10^5
  • 104−10^4 \leq număr 104\leq 10^4
  • 11 \leq index1 \leq index2 n\leq n
  • Este garantat că toate operațiile vor fi valide.
  • Prețurile pot deveni negative în urma operațiilor.
  • Starea se acumulează de la o zi la alta: ziua i+1i + 1 începe cu prețurile rezultate la finalul zilei ii, iar istoricul operațiilor (pentru undo/redo) se menține între zile.
  • În cazul în care se efectuează o nouă operație de modificare după una sau mai multe comenzi uu, istoricul operațiilor se păstrează, permițând astfel ca operațiile anulate să poată fi refăcute ulterior prin comanda rr.
# Puncte Restricții
1 16 numărul de operații de tipul undo/redo este 00
2 15 Q=1Q = 1
3 27 L=1,R=NL = 1, R = N, pentru fiecare operație de modificare de preț
4 42 Fără restricții suplimentare

Exemplul 1

librarie.in

5
10 20 30 40 50
2
3
+ 1 3 5
- 2 5 10
+ 4 5 2
3
u
u
u

librarie.out

15 15 25 32 42
10 20 30 40 50

Explicație

Ziua 11:
Inițial: [10,20,30,40,50][10, 20, 30, 40, 50].

  1. + 1 3 5+ \ 1 \ 3 \ 5: se adaugă 55 la pozițiile 131–3, rezultând [15,25,35,40,50][15, 25, 35, 40, 50].
  2.  2 5 10- \ 2 \ 5 \ 10: se scade 1010 din pozițiile 252–5, rezultând [15,15,25,30,40][15, 15, 25, 30, 40].
  3. + 4 5 2+ \ 4 \ 5 \ 2: se adaugă 22 la pozițiile 454–5, rezultând [15,15,25,32,42][15, 15, 25, 32, 42].

La finalul zilei 11, se obține starea: 15 15 25 32 4215 \ 15 \ 25 \ 32 \ 42.

Ziua 22:
Inițial: [15, 15, 25, 32, 42].
Operațiile sunt:

  • uu: anulează ultima operație (+ 4 5 2)(+ \ 4 \ 5 \ 2), rezultând [15,15,25,30,40][15, 15, 25, 30, 40].
  • uu: anulează următoarea operație (care a fost  2 5 10- \ 2 \ 5 \ 10), rezultând [15,25,35,40,50][15, 25, 35, 40, 50].
  • uu: anulează următoarea operație (care a fost + 1 3 5+ \ 1 \ 3 \ 5), rezultând [10,20,30,40,50][10, 20, 30, 40, 50].

La finalul zilei 22, se obține starea: 10 20 30 40 5010 \ 20 \ 30 \ 40 \ 50.

Exemplul 2

librarie.in

10
4 8 5 9 1 2 3 7 11 12
2
4
+ 2 5 2
- 1 3 2
+ 1 7 3
+ 1 7 3
5
u
r
+ 3 8 4
- 4 10 1
r

librarie.out

8 14 11 17 9 8 9 7 11 12
8 14 15 20 12 11 12 10 10 11

Explicație

Ziua 11:
Inițial: [4,8,5,9,1,2,3,7,11,12][4, 8, 5, 9, 1, 2, 3, 7, 11, 12].

  1. + 2 5 2+ \ 2 \ 5 \ 2: se adaugă 22 la pozițiile 252–5, rezultând [4,10,7,11,3,2,3,7,11,12][4, 10, 7, 11, 3, 2, 3, 7, 11, 12].
  2.  1 3 2- \ 1 \ 3 \ 2: se scade 22 din pozițiile 131–3, rezultând [2,8,5,11,3,2,3,7,11,12][2, 8, 5, 11, 3, 2, 3, 7, 11, 12].
  3. + 1 7 3+ \ 1 \ 7 \ 3: se adaugă 33 la pozițiile 171–7, rezultând [5,11,8,14,6,5,6,7,11,12][5, 11, 8, 14, 6, 5, 6, 7, 11, 12].
  4. + 1 7 3+ \ 1 \ 7 \ 3: se adaugă încă 33 la pozițiile 171–7, rezultând [8,14,11,17,9,8,9,7,11,12][8, 14, 11, 17, 9, 8, 9, 7, 11, 12].

La finalul zilei 11, starea este: 8 14 11 17 9 8 9 7 11 128 \ 14 \ 11 \ 17 \ 9 \ 8 \ 9 \ 7 \ 11 \ 12.

Ziua 22:
Inițial: [8,14,11,17,9,8,9,7,11,12][8, 14, 11, 17, 9, 8, 9, 7, 11, 12].
Operațiile sunt:

  • uu: anulează ultima operație (+ 1 7 3)(+ \ 1 \ 7 \ 3), rezultând [5,11,8,14,6,8,9,7,11,12][5, 11, 8, 14, 6, 8, 9, 7, 11, 12].
  • rr: refă operația anulată, revenind la [8,14,11,17,9,8,9,7,11,12][8, 14, 11, 17, 9, 8, 9, 7, 11, 12].
  • + 3 8 4+ \ 3 \ 8 \ 4: se adaugă 44 la pozițiile 383–8, rezultând [8,14,15,21,13,8,9,11,11,12][8, 14, 15, 21, 13, 8, 9, 11, 11, 12].
  •  4 10 1- \ 4 \ 10 \ 1: se scade 11 din pozițiile 4104–10, rezultând [8,14,15,20,12,8,9,10,10,11][8, 14, 15, 20, 12, 8, 9, 10, 10, 11].
  • rr: nu există nicio operație anulată la acest moment (comanda nu are efect), deci starea rămâne [8,14,15,20,12,8,9,10,10,11][8, 14, 15, 20, 12, 8, 9, 10, 10, 11].

La finalul zilei 22, starea este: 8 14 15 20 12 8 9 10 10 118 \ 14 \ 15 \ 20 \ 12 \ 8 \ 9 \ 10 \ 10 \ 11.

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