Tricky Matrix Updates

Time limit: 2s Memory limit: 64MB Input: Output:

Cerință

Se dă o matrice cu NN linii și MM coloane, inițial plină cu zero-uri. Se vor efectua QQ operații de două tipuri:

  • SUS col l1 l2 val
  • JOS col l1 l2 val

O operație de tip SUS adaugă valoarea valval pe o fâșie verticală de lungime l2l1+1l2-l1+1 începând de la linia l1l1 până la linia l2l2 pe coloana colcol. Pentru fiecare coloană din dreapta, fâșia se deplasează cu o unitate în sus (adică pe coloana col+1col+1 fâșia va fi de la l11l1-1 la l21l2-1, pe col+2col+2 de la l12l1-2 la l22l2-2 etc.), până când fâșia nu mai încape în matrice.

O operație de tip JOS adaugă valoarea valval pe o fâșie verticală de lungime l2l1+1l2-l1+1 începând de la linia l1l1 până la linia l2l2 pe coloana colcol. Pentru fiecare coloană din dreapta, fâșia se deplasează cu o unitate în jos (adică pe coloana col+1col+1 fâșia va fi de la l1+1l1+1 la l2+1l2+1, pe col+2col+2 de la l1+2l1+2 la l2+2l2+2 etc.), până când fâșia nu mai încape în matrice.

După efectuarea tuturor operațiilor, se cere să se afișeze matricea rezultată.

Date de intrare

Prima linie conține trei numere întregi NN, MM, QQ — dimensiunile matricei și numărul de operații.

Urmează QQ linii, fiecare descriind o operație de forma:

  • S col l1 l2 val sau
  • J col l1 l2 val

Date de ieșire

Se va afișa matricea rezultată, fiecare linie pe câte un rând, elementele separate prin spațiu.

Restricții

  • 1N,M10001 \leq N, M \leq 1000
  • 1Q21061 \leq Q \leq 2*10^6
  • 1colM1 \leq col \leq M
  • 1l1l2N1 \leq l1 \leq l2 \leq N
  • 1val1091 \leq val \leq 10^9

Subtask-uri

  • Subtask 1 (20 puncte): N,M,Q100N, M, Q \leq 100
  • Subtask 2 (35 puncte): N,M500N, M \leq 500, Q100000Q \leq 100\,000
  • Subtask 3 (45 puncte): N,M1000N, M \leq 1000, Q2000000Q \leq 2\,000\,000

Exemplu

stdin

5 5 1
S 1 3 5 1

stdout

0 0 1 1 1
0 1 1 1 0
1 1 1 0 0
1 1 0 0 0
1 0 0 0 0

stdin

4 4 2
S 2 2 4 2
J 1 1 2 3

stdout

3 0 2 2 
3 5 2 2 
0 5 5 0 
0 2 3 3 

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