#include <algorithm>
#include <iostream>
const int data[10][10] =
{{0,0,3,0,1,0,0,0,0,1},
{0,0,0,2,0,0,0,0,0,0},
{0,0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,0,0,3,0,0},
{0,4,2,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,8,1,1,0,0},
{0,0,0,0,3,6,0,0,2,0},
{2,0,0,0,0,0,0,0,0,0}};
int dataMax[10][10] = {};
int getMax(int minx, int maxx, int miny, int maxy)
{
minx = std::max(minx, 0);
maxx = std::min(maxx, 10);
miny = std::max(miny, 0);
maxy = std::min(maxy, 10);
int res = data[minx][miny];
for (int x = minx; x != maxx; ++x) {
for (int y = miny; y != maxy; ++y) {
res = std::max(res, data[x][y]);
}
}
return res;
}
void compute()
{
const int h = 3; // Size of region to compare
for (int x = 0; x != 10; ++x) {
for (int y = 0; y != 10; ++y) {
dataMax[x][y] = getMax(x - h / 2, x + h - h / 2,
y - h / 2, y + h - h / 2);
}
}
}
void filter()
{
for (int x = 0; x != 10; ++x) {
for (int y = 0; y != 10; ++y) {
if (dataMax[x][y] != data[x][y]) {
dataMax[x][y] = 0;
}
}
}
}
void print(const int (&a)[10][10])
{
for (int x = 0; x != 10; ++x) {
for (int y = 0; y != 10; ++y) {
std::cout << a[x][y] << " ";
}
std::cout << std::endl;
}
}
int main(int argc, char *argv[])
{
compute();
print(data);
std::cout << std::endl;
print(dataMax);
std::cout << std::endl;
filter();
print(dataMax);
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3QgaW50IGRhdGFbMTBdWzEwXSA9Cnt7MCwwLDMsMCwxLDAsMCwwLDAsMX0sCnswLDAsMCwyLDAsMCwwLDAsMCwwfSwKezAsMCwwLDAsMCwwLDEsMSwwLDB9LAp7MCwwLDAsMCwwLDAsMCwzLDAsMH0sCnswLDQsMiwwLDAsMCwwLDAsMCwwfSwKezAsMSwwLDAsMCwwLDAsMCwwLDB9LAp7MCwwLDAsMCwwLDAsMCwwLDAsMH0sCnswLDAsMCwwLDAsOCwxLDEsMCwwfSwKezAsMCwwLDAsMyw2LDAsMCwyLDB9LAp7MiwwLDAsMCwwLDAsMCwwLDAsMH19OwoKaW50IGRhdGFNYXhbMTBdWzEwXSA9IHt9OwoKaW50IGdldE1heChpbnQgbWlueCwgaW50IG1heHgsIGludCBtaW55LCBpbnQgbWF4eSkKewogICAgbWlueCA9IHN0ZDo6bWF4KG1pbngsIDApOwogICAgbWF4eCA9IHN0ZDo6bWluKG1heHgsIDEwKTsKICAgIG1pbnkgPSBzdGQ6Om1heChtaW55LCAwKTsKICAgIG1heHkgPSBzdGQ6Om1pbihtYXh5LCAxMCk7CiAgICBpbnQgcmVzID0gZGF0YVttaW54XVttaW55XTsKCiAgICBmb3IgKGludCB4ID0gbWlueDsgeCAhPSBtYXh4OyArK3gpIHsKICAgICAgICBmb3IgKGludCB5ID0gbWlueTsgeSAhPSBtYXh5OyArK3kpIHsKICAgICAgICAgICAgcmVzID0gc3RkOjptYXgocmVzLCBkYXRhW3hdW3ldKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwp9Cgp2b2lkIGNvbXB1dGUoKQp7CiAgICBjb25zdCBpbnQgaCA9IDM7ICAvLyBTaXplIG9mIHJlZ2lvbiB0byBjb21wYXJlCgogICAgZm9yIChpbnQgeCA9IDA7IHggIT0gMTA7ICsreCkgewogICAgICAgIGZvciAoaW50IHkgPSAwOyB5ICE9IDEwOyArK3kpIHsKICAgICAgICAgICAgZGF0YU1heFt4XVt5XSA9IGdldE1heCh4IC0gaCAvIDIsIHggKyBoIC0gaCAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIGggLyAyLCB5ICsgaCAtIGggLyAyKTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgZmlsdGVyKCkKewogICAgZm9yIChpbnQgeCA9IDA7IHggIT0gMTA7ICsreCkgewogICAgICAgIGZvciAoaW50IHkgPSAwOyB5ICE9IDEwOyArK3kpIHsKICAgICAgICAJaWYgKGRhdGFNYXhbeF1beV0gIT0gZGF0YVt4XVt5XSkgewogICAgICAgIAkJZGF0YU1heFt4XVt5XSA9IDA7CiAgICAgICAgCX0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgcHJpbnQoY29uc3QgaW50ICgmYSlbMTBdWzEwXSkKewogICAgZm9yIChpbnQgeCA9IDA7IHggIT0gMTA7ICsreCkgewogICAgICAgIGZvciAoaW50IHkgPSAwOyB5ICE9IDEwOyArK3kpIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGFbeF1beV0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgICBjb21wdXRlKCk7CiAgICBwcmludChkYXRhKTsKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICBwcmludChkYXRhTWF4KTsKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICBmaWx0ZXIoKTsKICAgIHByaW50KGRhdGFNYXgpOwoKICAgIHJldHVybiAwOwp9Cg==