func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   inline int size(const T& c) {     return c.size();   }   using namespace std;   int fastMax(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ y; }   int fastMin(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ x; }   const int maxn = 1000 + 10;   int a[maxn][maxn];   int u, x, y;   int h[4][maxn][maxn];   int res;   vector<int> st;   int s[maxn];   int n, m, q;   int vt[maxn];   int cal(int bd, int x) {     st.push_back(0);     int top = 0;     memset(vt, 0, sizeof(vt));     memset(s, 0, sizeof(s));     s[top] = 0;     int res = 0;     for (int i = 1; i < st.size(); i++) {       int temp = i;       while (top > 0 && s[top] > st[i]) {         if (bd + i - 2 >= x && x >= bd + vt[top] - 1)           res = max(res, (i - vt[top]) * s[top]);         temp = vt[top];         top--;       }       if (s[top] != st[i]) {         top++;         s[top] = st[i];         vt[top] = temp;       }     }     return res;   }   int main() {     scanf( %d%d%d , &n, &m, &q);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) scanf( %d , &a[i][j]);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         if (a[i][j] == 0)           h[0][i][j] = 0;         else           h[0][i][j] = h[0][i - 1][j] + 1;       }     for (int i = n; i >= 1; i--)       for (int j = 1; j <= m; j++) {         if (a[i][j] == 0)           h[1][i][j] = 0;         else           h[1][i][j] = h[1][i + 1][j] + 1;       }     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         if (a[i][j] == 0)           h[2][i][j] = 0;         else           h[2][i][j] = h[2][i][j - 1] + 1;       }     for (int i = 1; i <= n; i++)       for (int j = m; j >= 1; j--) {         if (a[i][j] == 0)           h[3][i][j] = 0;         else           h[3][i][j] = h[3][i][j + 1] + 1;       }     for (int cq = 1; cq <= q; cq++) {       scanf( %d%d%d , &u, &y, &x);       if (u == 1) {         a[y][x] = a[y][x] ^ 1;         for (int i = 1; i <= n; i++)           if (a[i][x] == 0)             h[0][i][x] = 0;           else             h[0][i][x] = h[0][i - 1][x] + 1;         for (int i = n; i >= 1; i--)           if (a[i][x] == 0)             h[1][i][x] = 0;           else             h[1][i][x] = h[1][i + 1][x] + 1;         for (int j = 1; j <= m; j++)           if (a[y][j] == 0)             h[2][y][j] = 0;           else             h[2][y][j] = h[2][y][j - 1] + 1;         for (int j = m; j >= 1; j--)           if (a[y][j] == 0)             h[3][y][j] = 0;           else             h[3][y][j] = h[3][y][j + 1] + 1;       }       if (u == 2) {         res = 0;         st.clear();         st.push_back(0);         for (int i = y - h[0][y][x] + 1; i <= y + h[1][y][x] - 1; i++)           st.push_back(h[2][i][x]);         res = max(res, cal(y - h[0][y][x] + 1, y));         st.clear();         st.push_back(0);         for (int i = y - h[0][y][x] + 1; i <= y + h[1][y][x] - 1; i++)           st.push_back(h[3][i][x]);         res = max(res, cal(y - h[0][y][x] + 1, y));         st.clear();         st.push_back(0);         for (int j = x - h[2][y][x] + 1; j <= x + h[3][y][x] - 1; j++)           st.push_back(h[0][y][j]);         res = max(res, cal(x - h[2][y][x] + 1, x));         st.clear();         st.push_back(0);         for (int j = x - h[2][y][x] + 1; j <= x + h[3][y][x] - 1; j++)           st.push_back(h[1][y][j]);         res = max(res, cal(x - h[2][y][x] + 1, x));         cout << res << endl;       }     }     fclose(stdin);     fclose(stdout);     return 0;   }   