#include <bits/stdc++.h>
#define int long long
struct Node
{
int i, j;
int num;
Node(int i, int j, int num) : i(i), j(j), num(num) {};
Node() = default;
};
signed
main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int h, w;
std::cin >> h >> w;
std::vector<std::vector<int>> a(h, std::vector<int>(w));
std::vector<Node> all;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
std::cin >> a[i][j];
all.push_back(Node(i, j, a[i][j]));
}
}
std::sort(all.begin(), all.end(), [&](Node a, Node b)
{ return a.num < b.num; });
int l = -1, r = 1e9;
while (l + 1 < r)
{
int mid = (l + r) / 2;
int left = -1;
int right = 1e9;
for (int i = 0; i < all.size(); i++)
{
if (all[i].num - all[0].num <= mid)
{
left = i;
}
if (all.back().num - all[i].num <= mid)
{
right = std::min(right, i);
}
}
left++;
right--;
if (left <= right)
{
l = mid;
continue;
}
std::vector<std::vector<char>> help(h, std::vector<char>(w, '#'));
for (int i = 0; i <= right; i++)
{
help[all[i].i][all[i].j] = 'I';
}
for (int i = left; i < all.size(); i++)
{
help[all[i].i][all[i].j] = 'J';
}
bool can = true;
for (int i = 0; i < h; i++)
{
std::string now;
char prev = '#';
for (int j = 0; j < w; j++)
{
if (help[i][j] == '#')
{
continue;
}
if (prev != help[i][j])
{
now += help[i][j];
prev = help[i][j];
}
}
if (now.size() > 2)
{
can = false;
}
}
for (int j = 0; j < w; j++)
{
std::string now;
char prev = '#';
for (int i = 0; i < h; i++)
{
if (help[i][j] == '#')
{
continue;
}
if (prev != help[i][j])
{
now += help[i][j];
prev = help[i][j];
}
}
if (now.size() > 2)
{
can = false;
}
}
if (can)
{
r = mid;
}
else
{
l = mid;
}
}
std::cout << r;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |