Advertisement
MinhNGUYEN2k4

Untitled

Feb 22nd, 2022
1,057
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. //Nguyen Huu Hoang Minh
  2. #include <bits/stdc++.h>
  3. #define sz(x) int(x.size())
  4. #define all(x) x.begin(),x.end()
  5. #define reset(x) memset(x, 0,sizeof(x))
  6. #define pb push_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define N 505
  11. #define remain(x) if (x > MOD) x -= MOD
  12. #define ii pair<int, int>
  13. #define iiii pair< ii , ii >
  14. #define viiii vector< iiii >
  15. #define vi vector<int>
  16. #define vii vector< ii >
  17. #define bit(x, i) (((x) >> (i)) & 1)
  18. #define Task "test"
  19. #define int long long
  20.  
  21. using namespace std;
  22.  
  23. typedef long double ld;
  24. const int inf = 1e10;
  25. const int minf = -1e10;
  26.  
  27. int n, m;
  28. int a[N][N];
  29. int pref[N][N];
  30.  
  31. int get(int l, int r, int x, int y){
  32.     return pref[x][y] - pref[x][r-1] - pref[l-1][y] + pref[l-1][r-1];
  33. }
  34.  
  35. void readfile()
  36. {
  37.     ios_base::sync_with_stdio(false);
  38.     cin.tie(0);cout.tie(0);
  39.     if (fopen(Task".inp","r"))
  40.     {
  41.         freopen(Task".inp","r",stdin);
  42.         //freopen(Task".out","w",stdout);
  43.     }
  44.     cin >> n >> m;
  45.     for(int i=1; i<=n; i++){
  46.         for(int j=1; j<=m; j++){
  47.             cin >> a[i][j];
  48.             pref[i][j] += pref[i-1][j] + pref[i][j-1];
  49.             pref[i][j] -= pref[i-1][j-1];
  50.             pref[i][j] += a[i][j];
  51.         }
  52.     }
  53. }
  54.  
  55. int mov_row=0;
  56. int mov_col=0;
  57.  
  58. int solve(int l, int r, int x, int y){
  59.     l += mov_row; l%=n; if (l==0) l=n;
  60.     x += mov_row; x%=n; if (x==0) x=n;
  61.     r += mov_col; r%=m; if (r==0) r=m;
  62.     y += mov_col; y%=m; if (y==0) y=m;
  63.     //cout << l << ' ' << r << endl;
  64.     //cout << x << ' ' << y << endl;
  65.     if (x >= l && y >= r){
  66.         return get(l,r,x,y);
  67.     }
  68.     if (x < l && y < r){
  69.         int res=0;
  70.         res += get(1,1,x,y);
  71.         res += get(1,r,x,m);
  72.         res += get(l,1,n,y);
  73.         res += get(l,r,n,m);
  74.         return res;
  75.     }
  76.     if (x < l && y >= r){
  77.         int res=0;
  78.         res += get(1,r,x,y);
  79.         res += get(l,r,n,y);
  80.         return res;
  81.     }
  82.     if (x >= l && y < r){
  83.         int res = 0;
  84.         res += get(l,1,x,y);
  85.         res += get(l,r,x,m);
  86.         return res;
  87.     }
  88. }
  89.  
  90. void proc()
  91. {
  92.     int q;
  93.     cin >> q;
  94.     //cout << get(3,4,4,4)<< endl;
  95.     while (q--){
  96.         int p; cin >> p;
  97.         if (p==0){
  98.             int R, D;
  99.             cin >> R >> D;
  100.             mov_row += D; mov_row %= n;
  101.             mov_col += R; mov_col %= m;
  102.         }
  103.         else{
  104.             int l, r, x, y;
  105.             cin >> l >> r >> x >> y;
  106.             cout << solve(l,r,x,y) << '\n';
  107.         }
  108.     }
  109. }
  110.  
  111. signed main()
  112. {
  113.     readfile();
  114.     proc();
  115.     return 0;
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement