Advertisement
matheus_monteiro

Laser

Sep 15th, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. struct BIT {
  5.     int n;
  6.     vector<map<int, int>> B;
  7.  
  8.     BIT(int _n) {
  9.         n = _n;
  10.         B.resize(n + 1);
  11.     }
  12.  
  13.     void add(int p, int x, int d) {
  14.         while(p <= n) {
  15.             B[p][x] += d;
  16.             p += (p&-p);
  17.         }
  18.     }
  19.  
  20.     int query(int p, int x) {
  21.         int s = 0;
  22.         while(p > 0) {
  23.             s += B[p][x];
  24.             p -= (p&-p);
  25.         }
  26.         return s;
  27.     }
  28.  
  29.     int rangeQuery(int l, int r, int x) {
  30.         return query(r, x) - query(l - 1, x);
  31.     }
  32. };
  33.  
  34. int main(){
  35.     int n, m, q;
  36.  
  37.     cin >> n >> m >> q;
  38.  
  39.     vector<int> row(n + 1), col(m + 1);
  40.     BIT rowBit(n), colBit(m);
  41.  
  42.     for(int i = 1; i <= n; ++i) {
  43.         rowBit.add(i, 0, +1);
  44.     }
  45.     for(int i = 1; i <= m; ++i) {
  46.         colBit.add(i, 0, +1);
  47.     }
  48.  
  49.     while(q--) {
  50.         char c;
  51.         int x, y;
  52.  
  53.         cin >> c >> x >> y;
  54.         if(c == 'A') {
  55.             rowBit.add(x, row[x], -1);
  56.             colBit.add(y, col[y], -1);
  57.             row[x]++;
  58.             col[y]++;
  59.             rowBit.add(x, row[x], +1);
  60.             colBit.add(y, col[y], +1);
  61.         } else if(c == 'R') {
  62.             rowBit.add(x, row[x], -1);
  63.             colBit.add(y, col[y], -1);
  64.             row[x]--;
  65.             col[y]--;
  66.             rowBit.add(x, row[x], +1);
  67.             colBit.add(y, col[y], +1);
  68.         } else {
  69.             int xx, yy;
  70.             cin >> xx >> yy;
  71.  
  72.             int lRow = min(x, xx), rRow = max(x, xx);
  73.             int lCol = min(y, yy), rCol = max(y, yy);
  74.  
  75.             int uncoveredRows = rowBit.rangeQuery(lRow, rRow, 0);
  76.             int uncoveredCols = colBit.rangeQuery(lCol, rCol, 0);
  77.  
  78.             if(!uncoveredRows || !uncoveredCols) {
  79.                 cout << "S\n";
  80.             } else {
  81.                 cout << "N\n";
  82.             }
  83.         }
  84.     }
  85.  
  86.     return 0;
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement