func_code_string: #include <bits/stdc++.h>   using namespace std;   int v[1005][1005];   long long c[1005][1005], sum[1005][1005], t[1005][1005];   int main() {     int n = 0, m = 0, a = 0, b = 0;     scanf( %d%d%d%d , &n, &m, &a, &b);     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         scanf( %d , &v[i][j]);         sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] +                     (long long)v[i][j];       }     }     vector<pair<long long, pair<int, int>>> res;     set<pair<long long, pair<int, int>>> cost;     for (int i = 1; i <= n; ++i) {       deque<long long> q;       for (int j = m; j >= 1; --j) {         while (!q.empty() && v[i][q.back()] > v[i][j]) {           q.pop_back();         }         q.push_back(j);         while (q.front() >= j + b) {           q.pop_front();         }         t[i][j] = v[i][q.front()];       }     }     for (int i = 1; i <= m; ++i) {       deque<long long> q;       for (int j = n; j >= 1; --j) {         while (!q.empty() && t[q.back()][i] > t[j][i]) {           q.pop_back();         }         q.push_back(j);         while (q.front() >= j + a) {           q.pop_front();         }         c[j][i] = t[q.front()][i];       }     }     for (int i = 1; i + a - 1 <= n; ++i) {       for (int j = 1; j + b - 1 <= m; ++j) {         long long tmp = sum[i + a - 1][j + b - 1] - sum[i + a - 1][j - 1] -                         sum[i - 1][j + b - 1] + sum[i - 1][j - 1] -                         (long long)a * b * c[i][j];         cost.insert(make_pair(tmp, make_pair(i, j)));       }     }     auto it = cost.begin();     while (it != cost.end()) {       while (it != cost.end() && c[it->second.first][it->second.second] == -1) {         ++it;       }       if (it == cost.end()) {         break;       }       res.push_back(*it);       int row = it->second.first, col = it->second.second;       int rMin = max(row - a + 1, 0), cMin = max(col - b + 1, 0),           rMax = min(row + a - 1, n - (a - 1)),           cMax = min(col + b - 1, m - (b - 1));       for (int i = rMin; i <= rMax; ++i) {         for (int j = cMin; j <= cMax; ++j) {           c[i][j] = -1;         }       }     }     printf( %d n , res.size());     for (int i = 0; i < res.size(); ++i) {       printf( %d %d %I64d n , res[i].second.first, res[i].second.second,              res[i].first);     }     return 0;   }   