| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1292995 | fairkrash | The Kingdom of JOIOI (JOI17_joioi) | C++20 | 3848 ms | 16604 KiB |
#include <bits/stdc++.h>
#include <random>
using namespace std;
using ll = int;
using ld = long double;
ll INF = 1e9 + 3;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
ll n, m;
cin >> n >> m;
vector<vector<ll>> s(n, vector<ll>(m));
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
cin >> s[i][j];
}
}
ll ans = INF;
{
vector<ll> z(m);
ll mx1 = 0;
ll mn1 = INF;
ll e1, e2;
ll l = 0, r = 2e9;
while (r - l > 1) {
ll mid = (r + l) / 2;
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = m - 2; i >= 0; i--) {
z[i] = max(z[i + 1], z[i]);
}
mx1 = -INF;
mn1 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < z[i]; j++) {
mn1 = min(mn1, s[j][i]);
mx1 = max(mx1, s[j][i]);
}
}
e1 = mx1 - mn1;
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = 1; i < m; i++) {
z[i] = max(z[i - 1], z[i]);
}
mx1 = -INF;
mn1 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < z[i]; j++) {
mn1 = min(mn1, s[j][i]);
mx1 = max(mx1, s[j][i]);
}
}
e2 = mx1 - mn1;
if (e1 < e2) {
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = m - 2; i >= 0; i--) {
z[i] = max(z[i + 1], z[i]);
}
ll mx2 = -INF;
ll mn2 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = z[i]; j < n; j++) {
mx2 = max(mx2, s[j][i]);
mn2 = min(mn2, s[j][i]);
}
}
ll d1 = mx2 - mn2;
ans = min(ans, max(d1, e1));
if (d1 > e1) {
l = mid;
} else {
r = mid;
}
} else {
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = 1; i < m; i++) {
z[i] = max(z[i - 1], z[i]);
}
ll mx2 = -INF;
ll mn2 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = z[i]; j < n; j++) {
mx2 = max(mx2, s[j][i]);
mn2 = min(mn2, s[j][i]);
}
}
ll d1 = mx2 - mn2;
ans = min(ans, max(d1, e2));
if (d1 > e2) {
l = mid;
} else {
r = mid;
}
}
}
}
for (ll i = 0; i < n / 2; i++) {
swap(s[i], s[n - 1 - i]);
}
{
vector<ll> z(m);
ll mx1 = 0;
ll mn1 = INF;
ll e1, e2;
ll l = 0, r = 2e9;
while (r - l > 1) {
ll mid = (r + l) / 2;
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = m - 2; i >= 0; i--) {
z[i] = max(z[i + 1], z[i]);
}
mx1 = -INF;
mn1 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < z[i]; j++) {
mn1 = min(mn1, s[j][i]);
mx1 = max(mx1, s[j][i]);
}
}
e1 = mx1 - mn1;
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = 1; i < m; i++) {
z[i] = max(z[i - 1], z[i]);
}
mx1 = -INF;
mn1 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < z[i]; j++) {
mn1 = min(mn1, s[j][i]);
mx1 = max(mx1, s[j][i]);
}
}
e2 = mx1 - mn1;
if (e1 < e2) {
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = m - 2; i >= 0; i--) {
z[i] = max(z[i + 1], z[i]);
}
ll mx2 = -INF;
ll mn2 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = z[i]; j < n; j++) {
mx2 = max(mx2, s[j][i]);
mn2 = min(mn2, s[j][i]);
}
}
ll d1 = mx2 - mn2;
ans = min(ans, max(d1, e1));
if (d1 > e1) {
l = mid;
} else {
r = mid;
}
} else {
for (ll i = 0; i < m; i++) {
z[i] = 0;
}
for (ll i = 0; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (s[j][i] <= mid) {
z[i] = j + 1;
}
}
}
for (ll i = 1; i < m; i++) {
z[i] = max(z[i - 1], z[i]);
}
ll mx2 = -INF;
ll mn2 = INF;
for (ll i = 0; i < m; i++) {
for (ll j = z[i]; j < n; j++) {
mx2 = max(mx2, s[j][i]);
mn2 = min(mn2, s[j][i]);
}
}
ll d1 = mx2 - mn2;
ans = min(ans, max(d1, e2));
if (d1 > e2) {
l = mid;
} else {
r = mid;
}
}
}
}
cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
