#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>
#include <cassert>
#include <cmath>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <cstdlib>
using namespace std;
#define INF 1e+9
#define mp make_pair
#define pb push_back
#define fi first
#define fs first
#define se second
#define i64 long long
#define li long long
#define lint long long
#define pii pair<int, int>
#define vi vector<int>
#define forn(i, n) for (int i = 0; i < (int)n; i++)
#define fore(i, b, e) for (int i = (int)b; i <= (int)e; i++)
const int maxn = 2005;
const int inf = 1e9+7;
pii prec[maxn][maxn];
int n, m;
int a[maxn][maxn];
struct Event {
int minn, row, diff;
};
bool operator < (Event fi, Event se) {
return fi.minn < se.minn;
}
bool check(int delta) {
//fprintf(stderr, "check %d\n", delta);
vector<Event> events;
forn(i, n) {
int cur_app = -inf;
int cur_dis = inf;
forn(j, m) {
//min <= x <= min + delta
cur_app = max(cur_app, a[i][j] - delta);
cur_dis = min(cur_dis, a[i][j] + 1);
if (cur_app < cur_dis) {
events.pb({cur_app, i, +1});
events.pb({cur_dis, i, -1});
}
}
}
sort(events.begin(), events.end());
/*for (auto e : events) {
fprintf(stderr, "event minn = %d row = %d diff = %d\n", e.minn, e.row, e.diff);
}*/
size_t pointer = 0;
vi rows(n);
while(pointer < events.size()) {
int minn = events[pointer].minn;
while(pointer < events.size() && events[pointer].minn == minn) {
rows[events[pointer].row] += events[pointer].diff;
pointer++;
}
/*printf("minn = %d\n", minn);
forn(i, n)
printf("rows[%d] = %d\n", i, rows[i]);*/
int len = rows[0];
int right_min = inf;
int right_max = -inf;
forn(row, n) {
len = min(len, rows[row]);
right_min = min(right_min, prec[row][len].fi);
right_max = max(right_max, prec[row][len].se);
}
//fprintf(stderr, "right min = %d max = %d\n", right_min, right_max);
if (right_max - right_min <= delta)
return true;
len = rows[n - 1];
right_min = inf;
right_max = -inf;
for (int row = n - 1; row >= 0; --row) {
len = min(len, rows[row]);
right_min = min(right_min, prec[row][len].fi);
right_max = max(right_max, prec[row][len].se);
}
// fprintf(stderr, "right min = %d max = %d\n", right_min, right_max);
if (right_max - right_min <= delta)
return true;
}
return false;
}
int main() {
#ifdef LOCAL
freopen("inp", "r", stdin);
//freopen("outp", "w", stdout);
#else
// freopen(TASKNAME ".in", "r", stdin);
// freopen(TASKNAME ".out", "w", stdout);
#endif
scanf("%d%d", &n, &m);
int global_min = inf;
int global_max = -inf;
forn(i, n)
forn(j, m) {
scanf("%d", &a[i][j]);
global_min = min(global_min, a[i][j]);
global_max = max(global_max, a[i][j]);
}
forn(i, n) {
prec[i][m] = {inf, -inf};
for (int len = m - 1; len >= 0; --len) {
prec[i][len] = {min(prec[i][len + 1].fi, a[i][len]),
max(prec[i][len + 1].se, a[i][len])};
//printf("prec[%d][%d] = %d %d\n", i, len, prec[i][len].fi, prec[i][len].se);
}
}
int start = 0;
int finish = global_max - global_min;
while(start < finish) {
int middle = (start + finish) / 2;
if (check(middle)) {
finish = middle;
} else {
start = middle + 1;
}
}
printf("%d", start);
}
Compilation message
joioi.cpp: In function 'int main()':
joioi.cpp:113:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~
joioi.cpp:118:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &a[i][j]);
~~~~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
484 KB |
Output is correct |
3 |
Correct |
2 ms |
560 KB |
Output is correct |
4 |
Correct |
2 ms |
560 KB |
Output is correct |
5 |
Correct |
2 ms |
636 KB |
Output is correct |
6 |
Correct |
2 ms |
712 KB |
Output is correct |
7 |
Correct |
2 ms |
712 KB |
Output is correct |
8 |
Correct |
2 ms |
712 KB |
Output is correct |
9 |
Correct |
2 ms |
712 KB |
Output is correct |
10 |
Correct |
2 ms |
712 KB |
Output is correct |
11 |
Correct |
2 ms |
712 KB |
Output is correct |
12 |
Correct |
2 ms |
712 KB |
Output is correct |
13 |
Correct |
2 ms |
712 KB |
Output is correct |
14 |
Correct |
2 ms |
712 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
484 KB |
Output is correct |
3 |
Correct |
2 ms |
560 KB |
Output is correct |
4 |
Correct |
2 ms |
560 KB |
Output is correct |
5 |
Correct |
2 ms |
636 KB |
Output is correct |
6 |
Correct |
2 ms |
712 KB |
Output is correct |
7 |
Correct |
2 ms |
712 KB |
Output is correct |
8 |
Correct |
2 ms |
712 KB |
Output is correct |
9 |
Correct |
2 ms |
712 KB |
Output is correct |
10 |
Correct |
2 ms |
712 KB |
Output is correct |
11 |
Correct |
2 ms |
712 KB |
Output is correct |
12 |
Correct |
2 ms |
712 KB |
Output is correct |
13 |
Correct |
2 ms |
712 KB |
Output is correct |
14 |
Correct |
2 ms |
712 KB |
Output is correct |
15 |
Correct |
2 ms |
712 KB |
Output is correct |
16 |
Correct |
8 ms |
2780 KB |
Output is correct |
17 |
Correct |
132 ms |
5200 KB |
Output is correct |
18 |
Correct |
88 ms |
5200 KB |
Output is correct |
19 |
Correct |
98 ms |
5200 KB |
Output is correct |
20 |
Correct |
74 ms |
5200 KB |
Output is correct |
21 |
Correct |
199 ms |
5200 KB |
Output is correct |
22 |
Correct |
126 ms |
5200 KB |
Output is correct |
23 |
Correct |
129 ms |
5200 KB |
Output is correct |
24 |
Correct |
116 ms |
5200 KB |
Output is correct |
25 |
Correct |
130 ms |
5200 KB |
Output is correct |
26 |
Correct |
187 ms |
5200 KB |
Output is correct |
27 |
Correct |
208 ms |
5200 KB |
Output is correct |
28 |
Correct |
222 ms |
5324 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
484 KB |
Output is correct |
3 |
Correct |
2 ms |
560 KB |
Output is correct |
4 |
Correct |
2 ms |
560 KB |
Output is correct |
5 |
Correct |
2 ms |
636 KB |
Output is correct |
6 |
Correct |
2 ms |
712 KB |
Output is correct |
7 |
Correct |
2 ms |
712 KB |
Output is correct |
8 |
Correct |
2 ms |
712 KB |
Output is correct |
9 |
Correct |
2 ms |
712 KB |
Output is correct |
10 |
Correct |
2 ms |
712 KB |
Output is correct |
11 |
Correct |
2 ms |
712 KB |
Output is correct |
12 |
Correct |
2 ms |
712 KB |
Output is correct |
13 |
Correct |
2 ms |
712 KB |
Output is correct |
14 |
Correct |
2 ms |
712 KB |
Output is correct |
15 |
Correct |
2 ms |
712 KB |
Output is correct |
16 |
Correct |
8 ms |
2780 KB |
Output is correct |
17 |
Correct |
132 ms |
5200 KB |
Output is correct |
18 |
Correct |
88 ms |
5200 KB |
Output is correct |
19 |
Correct |
98 ms |
5200 KB |
Output is correct |
20 |
Correct |
74 ms |
5200 KB |
Output is correct |
21 |
Correct |
199 ms |
5200 KB |
Output is correct |
22 |
Correct |
126 ms |
5200 KB |
Output is correct |
23 |
Correct |
129 ms |
5200 KB |
Output is correct |
24 |
Correct |
116 ms |
5200 KB |
Output is correct |
25 |
Correct |
130 ms |
5200 KB |
Output is correct |
26 |
Correct |
187 ms |
5200 KB |
Output is correct |
27 |
Correct |
208 ms |
5200 KB |
Output is correct |
28 |
Correct |
222 ms |
5324 KB |
Output is correct |
29 |
Execution timed out |
4040 ms |
119436 KB |
Time limit exceeded |
30 |
Halted |
0 ms |
0 KB |
- |