func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1e9;   const long long inf64 = 1e18;   const int N = 1e5 + 5;   int xmax, ymax, zmax, n, m, k;   enum TYPE { XZ, OPEN, CLOSED, UNKNOWN };   vector<pair<int, int> > add[N];   vector<pair<pair<pair<int, int>, pair<int, int> >, int> > op[N], cl[N];   vector<int> fen[4 * N];   vector<int> lin_ar[N];   vector<int> ar[4 * N];   void merge(int v) {     for (int i = 0, j = 0;          i < (int)ar[v << 1].size() || j < (int)ar[v << 1 | 1].size();) {       if (j == (int)ar[v << 1 | 1].size() ||           (i < (int)ar[v << 1].size() && ar[v << 1][i] < ar[v << 1 | 1][j])) {         if (ar[v].empty() || ar[v << 1][i] > ar[v].back()) {           ar[v].push_back(ar[v << 1][i]);         }         i++;       } else {         if (ar[v].empty() || ar[v << 1 | 1][j] > ar[v].back()) {           ar[v].push_back(ar[v << 1 | 1][j]);         }         j++;       }     }   }   void build(int v, int tl, int tr) {     if (tl == tr) {       ar[v] = lin_ar[tl];       sort(begin(ar[v]), end(ar[v]));       ar[v].resize(unique(begin(ar[v]), end(ar[v])) - ar[v].begin());     } else {       int tm = (tl + tr) >> 1;       build(v << 1, tl, tm);       build(v << 1 | 1, tm + 1, tr);       merge(v);     }     fen[v].resize(ar[v].size());   }   void change(int v, int tl, int tr, int px, int py) {     int pos = lower_bound(begin(ar[v]), end(ar[v]), py) - ar[v].begin();     for (int cur = pos; cur < (int)fen[v].size(); cur |= (cur + 1)) fen[v][cur]++;     if (tl < tr) {       int tm = (tl + tr) >> 1;       if (px <= tm) {         change(v << 1, tl, tm, px, py);       } else {         change(v << 1 | 1, tm + 1, tr, px, py);       }     }   }   int get(int v, int tl, int tr, int lx, int rx, int ly, int ry) {     if (lx <= tl && tr <= rx) {       int res = 0;       int pr = upper_bound(begin(ar[v]), end(ar[v]), ry) - ar[v].begin() - 1;       int pl = lower_bound(begin(ar[v]), end(ar[v]), ly) - ar[v].begin();       if (pl <= pr) {         for (int cur = pr; cur >= 0; cur = (cur & (cur + 1)) - 1)           res += fen[v][cur];         for (int cur = pl - 1; cur >= 0; cur = (cur & (cur + 1)) - 1)           res -= fen[v][cur];       }       return res;     } else {       int tm = (tl + tr) >> 1;       int res = 0;       if (lx <= tm) {         res += get(v << 1, tl, tm, lx, rx, ly, ry);       }       if (rx > tm) {         res += get(v << 1 | 1, tm + 1, tr, lx, rx, ly, ry);       }       return res;     }   }   TYPE res[N];   int cnt[N];   int lx, rx, ly, ry, lz, rz;   int main() {     scanf( %d %d %d , &xmax, &ymax, &zmax);     lx = ly = lz = inf;     rx = ry = rz = -inf;     scanf( %d %d %d , &n, &m, &k);     for (int i = 0; i < n; i++) {       int xi, yi, zi;       scanf( %d %d %d , &xi, &yi, &zi);       lx = min(lx, xi);       rx = max(rx, xi);       ly = min(ly, yi);       ry = max(ry, yi);       lz = min(lz, zi);       rz = max(rz, zi);     }     if (lx > rx || ly > ry || lz > rz) {       puts( INCORRECT );       return 0;     }     for (int i = 0; i < m; i++) {       int xi, yi, zi;       scanf( %d %d %d , &xi, &yi, &zi);       if (lx <= xi && xi <= rx && ly <= yi && yi <= ry && lz <= zi && zi <= rz) {         puts( INCORRECT );         return 0;       }       add[xi].push_back({yi, zi});       lin_ar[yi].push_back(zi);     }     build(1, 1, ymax);     puts( CORRECT );     for (int iter = 0; iter < k; iter++) {       int xi, yi, zi;       scanf( %d %d %d , &xi, &yi, &zi);       if (lx <= xi && xi <= rx && ly <= yi && yi <= ry && lz <= zi && zi <= rz) {         res[iter] = OPEN;         continue;       }       int LX = min(lx, xi);       int RX = max(rx, xi);       int LY = min(ly, yi);       int RY = max(ry, yi);       int LZ = min(lz, zi);       int RZ = max(rz, zi);       op[LX].push_back({{{LY, RY}, {LZ, RZ}}, iter});       cl[RX].push_back({{{LY, RY}, {LZ, RZ}}, iter});     }     for (int x = 1; x <= xmax; x++) {       for (auto hlp : op[x]) {         int lx, rx, ly, ry, id;         tie(lx, rx) = hlp.first.first;         tie(ly, ry) = hlp.first.second;         id = hlp.second;         int tmp = get(1, 1, ymax, lx, rx, ly, ry);         cnt[id] -= tmp;       }       for (pair<int, int> pt : add[x]) {         int x0, y0;         tie(x0, y0) = pt;         change(1, 1, ymax, x0, y0);       }       for (auto hlp : cl[x]) {         int lx, rx, ly, ry, id;         tie(lx, rx) = hlp.first.first;         tie(ly, ry) = hlp.first.second;         id = hlp.second;         int tmp = get(1, 1, ymax, lx, rx, ly, ry);         cnt[id] += tmp;       }     }     for (int iter = 0; iter < k; iter++) {       if (res[iter] == XZ) {         res[iter] = cnt[iter] > 0 ? CLOSED : UNKNOWN;       }       if (res[iter] == OPEN) {         puts( OPEN );       } else if (res[iter] == CLOSED) {         puts( CLOSED );       } else {         puts( UNKNOWN );       }     }     return 0;   }   