Advertisement
pasholnahuy

Untitled

May 24th, 2023
873
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <tuple>
  3. #include <random>
  4.  
  5.  
  6. using std::pair;
  7. using std::cin;
  8. using std::cout;
  9. using std::vector;
  10. using int64 = int64_t;
  11. using std::max;
  12. using std::min;
  13.  
  14. int GetPrev(int x) {
  15.     return x & (x + 1);
  16. }
  17. int GetNext(int x){
  18.     return x | (x + 1);
  19. }
  20.  
  21. int GetSum(int l, int b, int r, int t, vector<vector<int>> &values) {
  22.     int result = 0;
  23.     for (int i = r; i >= l; i = GetPrev(i) - 1) {
  24.         for (int j = t; j >= b; j = GetPrev(j) - 1) {
  25.             result += values[i][j];
  26.         }
  27.     }
  28.     return result;
  29. }
  30.  
  31. void Modify(int x, int y, int s, vector<vector<int>> &values) {
  32.     for (int i = x; i < values.size(); i = (i | (i + 1))) {
  33.         for (int j = y; j < values[0].size(); j = (j | (j + 1))) {
  34.             values[i][j] += s;
  35.         }
  36.     }
  37.  
  38. }
  39.  
  40. int main() {
  41.     int zero, s;
  42.     cin >> zero >> s;
  43.     vector<vector<int>> vec(s, vector<int>(s, 0));
  44.     while (true){
  45.         int num;
  46.         cin >> num;
  47.         if (num == 3){
  48.             break;
  49.         } else if (num == 2){
  50.             int l, b, r, t;
  51.             cin >> l >> b >> r >> t;
  52.             cout << GetSum(l, b, r ,t, vec) << '\n';
  53.         } else {
  54.             int x, y, a;
  55.             cin >> x >> y >> a;
  56.             Modify(x, y, a, vec);
  57.         }
  58.     }
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement