func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e3 + 5;   int n, m, W, H, a[N][N], b[N][N];   long long s[N][N];   int q[N];   inline long long S(int x1, int y1, int x2, int y2) {     return s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1];   }   struct BIT {     int c[N][N];     inline void add(int x1, int y1, int x2, int y2) {       add(x2, y2);       add(x1, y2);       add(x2, y1);       add(x1, y1);     }     inline void add(int x, int y) {       for (int i = x + 1; i <= n + 1; i += i & -i)         for (int j = y + 1; j <= m + 1; j += j & -j) c[i][j]++;     }     inline int qry(int x, int y) {       int ret = 0;       for (int i = x + 1; i; i -= i & -i)         for (int j = y + 1; j; j -= j & -j) ret += c[i][j];       return ret;     }     inline int qry(int x1, int y1, int x2, int y2) {       return qry(x2, y2) - qry(x1 - 1, y2) - qry(x2, y1 - 1) +              qry(x1 - 1, y1 - 1);     }   } bit;   int tot, X[N * N], Y[N * N];   long long V[N * N];   int main() {     scanf( %d%d%d%d , &n, &m, &W, &H);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++)         scanf( %d , &a[i][j]),             s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];     for (int i = 1; i <= n; i++) {       int h = 1, t = 0;       for (int j = 1; j <= m; j++) {         while (h <= t && j - q[h] >= H) h++;         while (h <= t && a[i][j] <= a[i][q[t]]) t--;         q[++t] = j;         b[i][j] = a[i][q[h]];       }     }     for (int j = 1; j <= m; j++) {       int h = 1, t = 0;       for (int i = 1; i <= n; i++) {         while (h <= t && i - q[h] >= W) h++;         while (h <= t && b[i][j] <= b[q[t]][j]) t--;         q[++t] = i;         a[i][j] = b[q[h]][j];       }     }     vector<pair<long long, int> > v;     for (int i = W; i <= n; i++)       for (int j = H; j <= m; j++)         v.push_back(pair<long long, int>(             S(i - W + 1, j - H + 1, i, j) - 1ll * W * H * a[i][j],             (i - 1) * m + j));     sort(v.begin(), v.end());     for (int i = 0, sz = v.size(); i < sz; i++) {       int y = (v[i].second - 1) % m + 1, x = (v[i].second - y) / m + 1;       if (bit.qry(x - W + 1, y - H + 1, x, y)) continue;       tot++;       X[tot] = x - W + 1;       Y[tot] = y - H + 1;       V[tot] = v[i].first;       bit.add(x - W + 1, y - H + 1, x, y);     }     printf( %d n , tot);     for (int i = 1; i <= tot; i++) printf( %d %d %lld n , X[i], Y[i], V[i]);     return 0;   }   