func_code_string: #include <bits/stdc++.h>   using namespace std;   void readi(int &x) {     int v = 0, f = 1;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readll(long long &x) {     long long v = 0ll, f = 1ll;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readc(char &x) {     char c;     while ((c = getchar()) ==    )       ;     x = c;   }   void writes(string s) { puts(s.c_str()); }   void writeln() { writes(  ); }   void writei(int x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   void writell(long long x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   long long n, m, aa, b, i, j, k, mx[1005][1005], mx2[1005][1005], a[1005][1005],       l, r, qx[1005][2], vis[1005][1005], c[1005][1005];   vector<pair<long long, pair<int, int> > > s;   vector<pair<pair<int, int>, long long> > ans;   int main() {     ios::sync_with_stdio(false);     ;     cin >> n >> m >> aa >> b;     for (i = 1; i <= n; i++) {       for (j = 1; j <= m; j++) {         cin >> a[i][j];         c[i][j] = c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1] + a[i][j];       }     }     for (i = 1; i <= n; i++) {       k = 1;       l = r = 0;       for (j = 1; j <= m; j++) {         while (k <= m && j + b > k) {           while (l < r && qx[r - 1][0] >= a[i][k]) r--;           qx[r][0] = a[i][k];           qx[r][1] = k;           r++;           k++;         }         while (l < r && qx[l][1] < j) l++;         mx[i][j] = qx[l][0];       }     }     for (i = 1; i <= m; i++) {       k = 1;       l = r = 0;       for (j = 1; j <= n; j++) {         while (k <= n && j + aa > k) {           while (l < r && qx[r - 1][0] >= mx[k][i]) r--;           qx[r][0] = mx[k][i];           qx[r][1] = k;           r++;           k++;         }         while (l < r && qx[l][1] < j) l++;         mx2[j][i] = qx[l][0];       }     }     for (i = 1; i + aa - 1 <= n; i++) {       for (j = 1; j + b - 1 <= m; j++) {         s.push_back(make_pair(c[i + aa - 1][j + b - 1] - c[i + aa - 1][j - 1] -                                   c[i - 1][j + b - 1] + c[i - 1][j - 1] -                                   mx2[i][j] * aa * b,                               make_pair(i, j)));       }     }     stable_sort((s).begin(), (s).end());     int pos = 0;     while (pos < s.size()) {       pair<long long, pair<int, int> > cur = s[pos];       pos++;       i = cur.second.first, j = cur.second.second;       if (vis[i][j]) continue;       for (int xx = max(i - aa + 1, 1ll); xx <= i + aa - 1 && xx <= n; xx++) {         for (int yy = max(j - b + 1, 1ll); yy <= j + b - 1 && yy <= m; yy++) {           vis[xx][yy] = 1;         }       }       ans.push_back(make_pair(make_pair(i, j), cur.first));     }     writell((long long)ans.size());     writeln();     for (i = 0; i < ans.size(); i++)       printf( %d %d %I64d n , ans[i].first.first, ans[i].first.second,              ans[i].second);     return 0;   }   