fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef pair <int, int> ii;
  6. typedef long long ll;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. // Kỹ thuật nhân đôi trên mảng 2D
  12. const int N = 5e2 + 5;
  13.  
  14. int n, m, q;
  15. int a[2 * N][2 * N];
  16. int sum[2 * N][2 * N];
  17.  
  18. int getSum(int x1, int y1, int x2, int y2) {
  19. return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
  20. }
  21.  
  22. int main() {
  23. ios::sync_with_stdio(false);
  24. cin.tie(nullptr);
  25. cin >> n >> m;
  26.  
  27. for (int x = 1; x <= n; x++) {
  28. for (int y = 1; y <= m; y++) {
  29. cin >> a[x][y];
  30. a[x + n][y] = a[x][y];
  31. a[x][y + m] = a[x][y];
  32. a[x + n][y + m] = a[x][y];
  33. }
  34. }
  35.  
  36. for (int x = 1; x <= 2 * n; x++) {
  37. for (int y = 1; y <= 2 * m; y++) {
  38. sum[x][y] = sum[x - 1][y] + sum[x][y - 1] - sum[x - 1][y - 1] + a[x][y];
  39. }
  40. }
  41.  
  42. cin >> q;
  43. int dx = 0, dy = 0;
  44.  
  45. while (q--) {
  46. int type; cin >> type;
  47.  
  48. if (type == 0) {
  49. int cnt_l, cnt_u;
  50. cin >> cnt_l >> cnt_u;
  51. dx = (dx + cnt_u) % n;
  52. dy = (dy + cnt_l) % m;
  53. }
  54. else {
  55. int u, v, s, t;
  56. cin >> u >> v >> s >> t;
  57.  
  58. int x1 = (u + dx - 1) % n + 1, y1 = (v + dy - 1) % m + 1;
  59. int x2 = x1 + (s - u), y2 = y1 + (t - v);
  60.  
  61. cout << getSum(x1, y1, x2, y2) << '\n';
  62. }
  63. }
  64. }
Success #stdin #stdout 0.01s 5732KB
stdin
4 5
1 2 5 2 1
4 3 1 2 3
2 3 5 3 1
3 2 1 1 5
5
0 2 1
1 2 2 3 4
0 2 4
1 1 1 1 1
1 3 2 4 5
stdout
15
3
17