//Make CSP great again
//Vengeance
#include <bits/stdc++.h>
#define TASK "TESTCODE"
using namespace std;
const int N = 2e3 + 1;
int a[N + 1][N + 1];
int b[N + 1][N + 1];
int joi[N + 1], ioi[N + 1];
int n, m;
int mn, mx;
void read()
{
mn = 1e9;
mx = 0;
cin >> n >> m;
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
cin >> a[i][j];
mn = min(mn, a[i][j]);
mx = max(mx, a[i][j]);
}
}
}
bool check(int mid)
{
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
if (a[i][j] < mx - mid)
{
b[i][j] = 1;
}
else if (a[i][j] > mn + mid)
{
b[i][j] = 2;
}
else
{
b[i][j] = 0;
}
}
}
bool case1 = true, case2 = true;
memset(joi, 0, sizeof(joi));
memset(ioi, 0x3f, sizeof(ioi));
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
if (b[i][j] == 2)
{
ioi[i] = min(ioi[i], j);
}
if (b[i][j] == 1)
{
joi[i] = max(joi[i], j);
}
}
ioi[i] = min(ioi[i], ioi[i - 1]);
if (joi[i] > ioi[i])
{
case1 = false;
break;
}
joi[i] = max(joi[i], joi[i - 1]);
}
memset(joi, 0, sizeof(joi));
memset(ioi, 0x3f, sizeof(ioi));
for (int i = n; i >= 1; -- i)
{
for (int j = 1; j <= m; ++ j)
{
if (b[i][j] == 2)
{
ioi[i] = min(ioi[i], j);
}
}
ioi[i] = min(ioi[i + 1], ioi[i]);
}
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
if (b[i][j] == 1)
{
if (j > ioi[i])
{
case2 = false;
break;
}
}
}
}
return case1 | case2;
}
void solve()
{
int low = 1, high = 1e9;
while(low <= high)
{
int mid = (low + high)/2;
if (check(mid))
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
cout << low;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen(TASK".INP", "r"))
{
freopen(TASK".INP", "r", stdin);
//freopen(TASK".OUT", "w", stdout);
}
int t = 1;
bool typetest = false;
if (typetest)
{
cin >> t;
}
for (int __ = 1; __ <= t; ++ __)
{
//cout << "Case " << __ << ": ";
read();
solve();
}
}
Compilation message (stderr)
joioi.cpp: In function 'int main()':
joioi.cpp:123:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
123 | freopen(TASK".INP", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |