func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   vector<int> fa;   int n, m, q, g[300][300], x, y, c;   int id(int x, int y) { return x * m + y; }   int in(int x, int y) { return x >= 0 && y >= 0 && x < n && y < m; }   int find(int x) { return fa[x] == x ? x : (fa[x] = find(fa[x])); }   int merge(int x, int y) {     int xx = find(x), yy = find(y);     if (xx == yy) {       return 0;     } else {       fa[xx] = yy;       return 1;     }   }   int ADD(int x, int y) {     int p = id(x, y);     if (fa[p] != INF) return 0;     fa[p] = p;     static int dx[] = {0, 0, 1, -1};     static int dy[] = {1, -1, 0, 0};     int r = 1;     for (int i = (int)0; i < (int)4; ++i) {       int nx = x + dx[i], ny = y + dy[i];       int pp = id(nx, ny);       if (in(nx, ny) && fa[pp] != INF) {         r -= merge(p, pp);       }     }     return r;   }   struct P {     int x, y, p;     P(int x_, int y_, int p_) : x(x_), y(y_), p(p_) {}   };   int main() {     scanf( %d%d%d , &n, &m, &q);     fa.resize(n * m);     memset(g, 0, sizeof(g));     vector<vector<P>> add(1), del(1);     int pc = 0, cc = 0;     for (int i = (int)0; i < (int)q; ++i) {       scanf( %d%d%d , &x, &y, &c);       --x, --y;       if (c != pc) {         pc = c;         ++cc;         add.emplace_back(vector<P>{}), del.emplace_back(vector<P>{});       }       c = cc;       if (g[x][y] != c) {         del[g[x][y]].emplace_back(x, y, i);         add[c].emplace_back(x, y, i);         g[x][y] = c;       }     }     vector<int> df(q, 0);     for (int i = (int)0; i < (int)n; ++i)       for (int j = (int)0; j < (int)m; ++j) add[0].emplace_back(i, j, 0);     for (int c = (int)1; c < (int)cc + 1; ++c) {       if (add[c].empty()) continue;       fill(fa.begin(), fa.end(), INF);       for (auto &p : add[c]) {         df[p.p] = ADD(p.x, p.y);       }     }     df[0] += 1;     for (int c = (int)0; c < (int)cc + 1; ++c) {       fill(fa.begin(), fa.end(), INF);       unordered_set<int> xx;       for (auto &p : del[c]) {         xx.insert(id(p.x, p.y));       }       for (auto &p : add[c]) {         if (!xx.count(id(p.x, p.y))) ADD(p.x, p.y);       }       int n = del[c].size();       for (int i = (int)n - 1; i >= (int)0; --i) {         auto &p = del[c][i];         df[p.p] -= ADD(p.x, p.y);       }     }     int cnt = 0;     for (int i = (int)0; i < (int)q; ++i) {       cnt += df[i];       printf( %d n , cnt);     }   }   