Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- using namespace std;
- struct BIT {
- int n;
- vector<map<int, int>> B;
- BIT(int _n) {
- n = _n;
- B.resize(n + 1);
- }
- void add(int p, int x, int d) {
- while(p <= n) {
- B[p][x] += d;
- p += (p&-p);
- }
- }
- int query(int p, int x) {
- int s = 0;
- while(p > 0) {
- s += B[p][x];
- p -= (p&-p);
- }
- return s;
- }
- int rangeQuery(int l, int r, int x) {
- return query(r, x) - query(l - 1, x);
- }
- };
- int main(){
- int n, m, q;
- cin >> n >> m >> q;
- vector<int> row(n + 1), col(m + 1);
- BIT rowBit(n), colBit(m);
- for(int i = 1; i <= n; ++i) {
- rowBit.add(i, 0, +1);
- }
- for(int i = 1; i <= m; ++i) {
- colBit.add(i, 0, +1);
- }
- while(q--) {
- char c;
- int x, y;
- cin >> c >> x >> y;
- if(c == 'A') {
- rowBit.add(x, row[x], -1);
- colBit.add(y, col[y], -1);
- row[x]++;
- col[y]++;
- rowBit.add(x, row[x], +1);
- colBit.add(y, col[y], +1);
- } else if(c == 'R') {
- rowBit.add(x, row[x], -1);
- colBit.add(y, col[y], -1);
- row[x]--;
- col[y]--;
- rowBit.add(x, row[x], +1);
- colBit.add(y, col[y], +1);
- } else {
- int xx, yy;
- cin >> xx >> yy;
- int lRow = min(x, xx), rRow = max(x, xx);
- int lCol = min(y, yy), rCol = max(y, yy);
- int uncoveredRows = rowBit.rangeQuery(lRow, rRow, 0);
- int uncoveredCols = colBit.rangeQuery(lCol, rCol, 0);
- if(!uncoveredRows || !uncoveredCols) {
- cout << "S\n";
- } else {
- cout << "N\n";
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement