1 2 3 3 21 2 3 3 32 2 3 3 33 3 3 2 23 3 2 7 11 2 3 3 21 2 3 3 32 2 3 3 33 3 3 2 23 3 4 4 14 3 3 4 81 1 2 3 4#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>using namespace std;#define N 510int sg[N][N], tg[N][N];int d[256];int main() {int n, m;while (scanf(" %d %d", &n, &m) == 2) {for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {scanf(" %d", &sg[i][j]);tg[i][j] = sg[i][j];}}int p, q;scanf(" %d %d", &p, &q);for (int i = p / 2; i + p / 2 < n; i++) {memset(d, 0, sizeof(d));for (int ei = i - p / 2; ei <= i + p / 2; ei++) {for (int ej = 0; ej < q; ej++) {d[sg[ei][ej]]++;}}int mid, s;for (s = 0, mid = 0;; mid++) {s += d[mid];if (s * 2 > p * q)break;}tg[i][q / 2] = mid;for (int j = q / 2 + 1; j + q / 2 < m; j++) {for (int ei = i - p / 2; ei <= i + p / 2; ei++) {d[sg[ei][j - q / 2 - 1]]--;d[sg[ei][j + q / 2]]++;if (sg[ei][j - q / 2 - 1] <= mid) {s--;}if (sg[ei][j + q / 2] <= mid) {s++;}}while ((s - d[mid]) * 2 >= p * q) {s -= d[mid];mid--;}while (s * 2 < p * q) {mid++;s += d[mid];}tg[i][j] = mid;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (j)putchar(' ');printf("%d", tg[i][j]);}puts("");}puts("");}return 0;}


