#include <bits/stdc++.h>
#define int long long
#define mid(l, u) ((l+u)/2)
#define lchild(i) (i*2 + 1)
#define rchild(i) (i*2 + 2)
#define INF 100000000000
using namespace std;
const int N = 2005;
int n, m;
int mat[N][N];
pair<int, int> pmm[N][N];
int ourmin, ourmax;
int ind[N];
int ans = 0;
int mini = 0, maxi = INF;
set<int> el;
vector<int> dist;
void calcpmm(){
for(int i =0 ;i<n;i++){
pmm[i][m-1] = {mat[i][m-1], mat[i][m-1]};
for(int j = m-2;j>=0;j--){
pmm[i][j].first = min(mat[i][j], pmm[i][j+1].first);
pmm[i][j].second = max(mat[i][j], pmm[i][j+1].second);
}
}
}
int findinrange(int l, int u){
//cout<<endl;
//cout<<l<<" "<<u<<endl;
/*for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++) cout<<mat[i][j]<<" ";
cout<<endl;
}*/
int theirmin = INF;
int theirmax = -INF;
bool canmove = true;
for(int i =0 ;i<n;i++){
int j = ind[i];
for (; (j < m) && (mat[i][j] >= l) && (mat[i][j] <= u) && (j<=((i>0)?ind[i-1]:INF)); j++) {
ourmin = min(mat[i][j], ourmin);
ourmax = max(ourmax, mat[i][j]);
ind[i] = j;
}
if(j<m){
theirmin = min(pmm[i][j].first, theirmin);
theirmax = max(pmm[i][j].second, theirmax);
}
}
if(ourmin > ourmax || theirmin > theirmax) return INF;
//cout<<theirmax<<" "<<theirmin<<" "<<ourmax<<" "<<ourmin<<endl;
//cout<<max(theirmax - theirmin, ourmax - ourmin)<<endl;
//cout<<endl;
return max(theirmax - theirmin, ourmax - ourmin);
}
int findans(){
int l = mini;
int u = maxi;
calcpmm();
int tr = INF;
for(int i = 0;i<n;i++) ind[i] = 0;
ourmin = INF;
ourmax = -INF;
for(int k = 0;k<(dist.size()-1);k++){
tr = min(tr, findinrange(l, dist[k]));
}
for(int i = 0;i<n;i++) ind[i] = 0;
ourmin = INF;
ourmax = -INF;
for(int k = dist.size()-1;k>0;k--){
tr = min(tr, findinrange(dist[k], u));
}
return tr;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
int a[n][m];
for(int i =0 ;i<n;i++){
for(int j = 0;j<m;j++) {
cin >> mat[i][j];
maxi = max(maxi, mat[i][j]);
mini = min(mini, mat[i][j]);
a[i][j] = mat[i][j];
el.insert(mat[i][j]);
}
}
for(int j: el) dist.push_back(j);
ans = maxi - mini;
ans = min(ans, findans());
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++) mat[i][j] = a[i][m-j-1];
}
ans = min(ans, findans());
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++) mat[i][j] = a[n-i-1][m-j-1];
}
ans = min(ans, findans());
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++) mat[i][j] = a[n-i-1][j];
}
ans = min(ans, findans());
cout<<ans<<endl;
}
/*
4 4
1 12 6 11
11 10 2 14
10 1 9 20
4 17 19 10
8 6
23 23 10 11 16 21
15 26 19 28 19 20
25 26 28 16 15 11
11 8 19 11 15 24
14 19 15 14 24 11
10 8 11 7 6 14
23 5 19 23 17 17
18 11 21 14 20 16
*/
Compilation message
joioi.cpp: In function 'long long int findinrange(long long int, long long int)':
joioi.cpp:36:10: warning: unused variable 'canmove' [-Wunused-variable]
bool canmove = true;
^~~~~~~
joioi.cpp: In function 'long long int findans()':
joioi.cpp:63:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int k = 0;k<(dist.size()-1);k++){
~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
5 ms |
384 KB |
Output is correct |
3 |
Correct |
5 ms |
384 KB |
Output is correct |
4 |
Correct |
5 ms |
384 KB |
Output is correct |
5 |
Correct |
5 ms |
384 KB |
Output is correct |
6 |
Correct |
5 ms |
396 KB |
Output is correct |
7 |
Correct |
5 ms |
384 KB |
Output is correct |
8 |
Correct |
5 ms |
384 KB |
Output is correct |
9 |
Correct |
5 ms |
384 KB |
Output is correct |
10 |
Correct |
5 ms |
384 KB |
Output is correct |
11 |
Correct |
5 ms |
384 KB |
Output is correct |
12 |
Correct |
5 ms |
384 KB |
Output is correct |
13 |
Correct |
5 ms |
384 KB |
Output is correct |
14 |
Correct |
5 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
5 ms |
384 KB |
Output is correct |
3 |
Correct |
5 ms |
384 KB |
Output is correct |
4 |
Correct |
5 ms |
384 KB |
Output is correct |
5 |
Correct |
5 ms |
384 KB |
Output is correct |
6 |
Correct |
5 ms |
396 KB |
Output is correct |
7 |
Correct |
5 ms |
384 KB |
Output is correct |
8 |
Correct |
5 ms |
384 KB |
Output is correct |
9 |
Correct |
5 ms |
384 KB |
Output is correct |
10 |
Correct |
5 ms |
384 KB |
Output is correct |
11 |
Correct |
5 ms |
384 KB |
Output is correct |
12 |
Correct |
5 ms |
384 KB |
Output is correct |
13 |
Correct |
5 ms |
384 KB |
Output is correct |
14 |
Correct |
5 ms |
384 KB |
Output is correct |
15 |
Correct |
5 ms |
512 KB |
Output is correct |
16 |
Correct |
10 ms |
3200 KB |
Output is correct |
17 |
Correct |
408 ms |
5832 KB |
Output is correct |
18 |
Correct |
396 ms |
5868 KB |
Output is correct |
19 |
Correct |
408 ms |
5756 KB |
Output is correct |
20 |
Correct |
313 ms |
5232 KB |
Output is correct |
21 |
Correct |
403 ms |
5884 KB |
Output is correct |
22 |
Correct |
393 ms |
6008 KB |
Output is correct |
23 |
Correct |
409 ms |
6132 KB |
Output is correct |
24 |
Correct |
302 ms |
5360 KB |
Output is correct |
25 |
Correct |
413 ms |
6132 KB |
Output is correct |
26 |
Correct |
420 ms |
6136 KB |
Output is correct |
27 |
Correct |
404 ms |
6004 KB |
Output is correct |
28 |
Correct |
380 ms |
5884 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
5 ms |
384 KB |
Output is correct |
3 |
Correct |
5 ms |
384 KB |
Output is correct |
4 |
Correct |
5 ms |
384 KB |
Output is correct |
5 |
Correct |
5 ms |
384 KB |
Output is correct |
6 |
Correct |
5 ms |
396 KB |
Output is correct |
7 |
Correct |
5 ms |
384 KB |
Output is correct |
8 |
Correct |
5 ms |
384 KB |
Output is correct |
9 |
Correct |
5 ms |
384 KB |
Output is correct |
10 |
Correct |
5 ms |
384 KB |
Output is correct |
11 |
Correct |
5 ms |
384 KB |
Output is correct |
12 |
Correct |
5 ms |
384 KB |
Output is correct |
13 |
Correct |
5 ms |
384 KB |
Output is correct |
14 |
Correct |
5 ms |
384 KB |
Output is correct |
15 |
Correct |
5 ms |
512 KB |
Output is correct |
16 |
Correct |
10 ms |
3200 KB |
Output is correct |
17 |
Correct |
408 ms |
5832 KB |
Output is correct |
18 |
Correct |
396 ms |
5868 KB |
Output is correct |
19 |
Correct |
408 ms |
5756 KB |
Output is correct |
20 |
Correct |
313 ms |
5232 KB |
Output is correct |
21 |
Correct |
403 ms |
5884 KB |
Output is correct |
22 |
Correct |
393 ms |
6008 KB |
Output is correct |
23 |
Correct |
409 ms |
6132 KB |
Output is correct |
24 |
Correct |
302 ms |
5360 KB |
Output is correct |
25 |
Correct |
413 ms |
6132 KB |
Output is correct |
26 |
Correct |
420 ms |
6136 KB |
Output is correct |
27 |
Correct |
404 ms |
6004 KB |
Output is correct |
28 |
Correct |
380 ms |
5884 KB |
Output is correct |
29 |
Execution timed out |
4058 ms |
147400 KB |
Time limit exceeded |
30 |
Halted |
0 ms |
0 KB |
- |