Undo

Time limit: 0.4s Memory limit: 64MB Input: undo.in Output: undo.out

Bossanip vă dă o matrice N×NN \times N inițial plină cu 00. Se pot executa asupra ei 33 tipuri de operații:

  • 11 – Update x y zx \ y \ z: La valoarea elementului de pe linia xx și coloana yy se adună valoarea întreagă zz.
  • 22 – Query x yx \ y: Se cere suma elementelor din submatricea determinată de colțul stânga-sus (1,1)(1,1) și colțul dreapta-jos (x,y)(x,y).
  • 33 – Undo xx: Elimină ultimele xx operații de Update și Undo.

Se dau MM astfel de operatii.

Date de intrare

Pe prima linie a fișierului de intrare undo.in se va afla un număr natural NN și un număr natural MM. Pe următoarele MM linii vor fi cele MM operații (1 x y z1 \ x \ y \ z pentru Update; 2 x y2 \ x \ y pentru Query; 3 x3 \ x pentru Undo)

Date de ieșire

În fișierul de ieșire undo.out se va afisa răspunsul pentru fiecare operație de tip Query, câte unul pe linie.

Restricții si precizări

  • 1N5201 \leq N \leq 520;
  • 1M500 0001 \leq M \leq 500 \ 000;
  • Se garantează că la operatiile de tip Undo xx au existat cel puțin xx operatii de Update și Undo înainte.
  • 1z2 0001 \leq z \leq 2 \ 000, pentru orice operație de tip 11;
  • L-ați uitat pe Tassadar!

Exemplu

undo.in

5 11
1 1 1 2
1 2 3 1
2 1 3
1 3 2 4
1 2 2 10
2 3 2
3 2
1 1 1 3
2 5 5
3 3
2 4 4

undo.out

2
16
6
7

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