func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1005;   int n, m, q, a[N][N], op, x, y, R[N][N], L[N][N], U[N][N], D[N][N];   void update() {     if (a[x][y]) {       a[x][y] = 0;       D[x][y] = U[x][y] = R[x][y] = L[x][y] = 0;       for (int i = x - 1; i >= 1 && a[i][y]; --i) D[i][y] = x - i;       for (int i = x + 1; i <= n && a[i][y]; ++i) U[i][y] = i - x;       for (int j = y - 1; j >= 1 && a[x][j]; --j) R[x][j] = y - j;       for (int j = y + 1; j <= m && a[x][j]; ++j) L[x][j] = j - y;     } else {       a[x][y] = 1;       D[x][y] = 1 + D[x + 1][y];       U[x][y] = 1 + U[x - 1][y];       L[x][y] = 1 + L[x][y - 1];       R[x][y] = 1 + R[x][y + 1];       int i, j;       for (i = x - 1; i >= 1 && a[i][y]; --i) D[i][y] = x - i + D[x][y];       for (i = x + 1; i <= n && a[i][y]; ++i) U[i][y] = i - x + U[x][y];       for (j = y - 1; j >= 1 && a[x][j]; --j) R[x][j] = y - j + R[x][y];       for (j = y + 1; j <= m && a[x][j]; ++j) L[x][j] = j - y + L[x][y];     }   }   int solve() {     int ret = 0;     int u, d, l, r, w;     u = d = x;     w = N;     while (u >= 1 || d <= n) {       w = min(w, max(R[u][y], R[d][y]));       for (; u >= 1 && R[u][y] >= w; --u)         ;       for (; d <= n && R[d][y] >= w; ++d)         ;       ret = max(ret, (d - u - 1) * w);     }     u = d = x;     w = N;     while (u >= 1 || d <= n) {       w = min(w, max(L[u][y], L[d][y]));       for (; u >= 1 && L[u][y] >= w; --u)         ;       for (; d <= n && L[d][y] >= w; ++d)         ;       ret = max(ret, (d - u - 1) * w);     }     l = r = y;     w = N;     while (l >= 1 || r <= m) {       w = min(w, max(D[x][l], D[x][r]));       for (; l >= 1 && D[x][l] >= w; --l)         ;       for (; r <= m && D[x][r] >= w; ++r)         ;       ret = max(ret, (r - l - 1) * w);     }     l = r = y;     w = N;     while (l >= 1 || r <= m) {       w = min(w, max(U[x][l], U[x][r]));       for (; l >= 1 && U[x][l] >= w; --l)         ;       for (; r <= m && U[x][r] >= w; ++r)         ;       ret = max(ret, (r - l - 1) * w);     }     return ret;   }   void init() {     int l, r, u, d;     for (int i = 1; i <= n; ++i) {       for (r = 1; r <= m && a[i][r] == 0; ++r) R[i][r] = 0;       l = r;       while (l <= m) {         for (; r <= m && a[i][r]; ++r)           ;         for (; l <= r; ++l) R[i][l] = r - l;         ++r;       }       for (l = m; l >= 1 && a[i][l] == 0; --l) L[i][l] = 0;       r = l;       while (r >= 1) {         for (; l >= 1 && a[i][l]; --l)           ;         for (; r >= l; --r) L[i][r] = r - l;         --l;       }     }     for (int j = 1; j <= m; ++j) {       for (d = 1; d <= n && a[d][j] == 0; ++d) D[d][j] = 0;       u = d;       while (u <= n) {         for (; d <= n && a[d][j]; ++d)           ;         for (; u <= d; ++u) D[u][j] = d - u;         ++d;       }       for (u = n; u >= 1 && a[u][j] == 0; --u) U[u][j] = 0;       d = u;       while (d >= 1) {         for (; u >= 1 && a[u][j]; --u)           ;         for (; d >= u; --d) U[d][j] = d - u;         --u;       }     }   }   int main() {     cin >> n >> m >> q;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         scanf( %d , &a[i][j]);       }     }     init();     while (q--) {       scanf( %d%d%d , &op, &x, &y);       if (op == 1)         update();       else         printf( %d n , solve());     }     return 0;   }   