func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 200005;   set<int> ab[MAXN][2];   int N, M, Q;   struct segTree {     int f, t, mini, maxi;     bool ans;     segTree *L, *R;     segTree(int _f, int _t) : f(_f), t(_t) {       ans = false;       mini = INT_MAX;       maxi = INT_MIN;       if (f != t) {         L = new segTree(f, (f + t) / 2);         R = new segTree((f + t) / 2 + 1, t);       }     }     void update(int x, int v, bool flag) {       if (f == t && t == x) {         if (flag)           maxi = v;         else           mini = v;         ans = maxi >= mini;         return;       }       if (x < R->f)         L->update(x, v, flag);       else         R->update(x, v, flag);       mini = min(R->mini, L->mini);       maxi = max(R->maxi, L->maxi);       ans = R->ans | L->ans | (R->maxi >= L->mini);     }   };   int main() {     scanf( %d %d %d , &N, &M, &Q);     segTree *tree = new segTree(0, N + 1);     for (int i = 0; i < Q; i++) {       int x, y;       scanf( %d %d , &x, &y);       x--, y--;       bool flag = (x & 1);       int mult = (flag ? -1 : 1);       if (ab[x / 2][flag].count((y / 2) * mult))         ab[x / 2][flag].erase((y / 2) * mult);       else         ab[x / 2][flag].insert((y / 2) * mult);       int val = INT_MAX;       if (flag) val = INT_MIN;       if (ab[x / 2][flag].size() > 0) val = abs(*ab[x / 2][flag].begin());       tree->update(x / 2, val, flag);       puts((!tree->ans ?  YES  :  NO ));     }     return 0;   }   