답안 #1014066

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1014066 2024-07-04T10:21:12 Z snpmrnhlol The Kingdom of JOIOI (JOI17_joioi) C++17
0 / 100
0 ms 604 KB
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3;
const int inf = 1e9;
int n,m,mx = -1;
int v[N][N];
int v2[N][N];
int pref[N][N];
int suf[N][N];
int sufmx[N][N];
int ans = inf;
bool chk(int x){
    bool ok = 0;
    int pt = m - 1;
    int mx2 = -inf,mn2 = inf;
    for(int i = 0;i < n;i++){
        while(pt >= 0 && pref[i][pt] < mx - x){
            pt--;
        }
        if(pt != m - 1){
            mx2 = max(sufmx[i][pt + 1],mx2);
            mn2 = min(suf[i][pt + 1],  mn2);
        }
    }
    if(mx2 - mn2 <= x){
        ok = 1;
    }
    return ok;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m;
    for(int i = 0;i < n;i++){
        for(int j = 0;j < m;j++){
            cin>>v[i][j];
            mx = max(mx,v[i][j]);
        }
    }
    ans = mx;
    for(int k = 0;k < 2;k++){
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                pref[i][j] = min((j == 0?inf:pref[i][j - 1]),v[i][j]);
            }
        }
        for(int i = 0;i < n;i++){
            for(int j = m - 1;j >= 0;j--){
                suf[i][j] = min((j == m - 1?inf:suf[i][j + 1]),v[i][j]);
                sufmx[i][j] = max((j == m - 1?0:sufmx[i][j + 1]),v[i][j]);
            }
        }
        int l = 0,r = ans;
        while(l != r){
            int mij = (l + r)/2;
            if(chk(mij)){
                r = mij;
            }else l = mij + 1;
        }
        ans = min(ans,l);
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                v2[j][n - i - 1] = v[i][j];
            }
        }
        swap(n,m);
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                v[i][j] = v2[i][j];
            }
        }
    }
    cout<<ans<<'\n';
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Incorrect 0 ms 604 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Incorrect 0 ms 604 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Incorrect 0 ms 604 KB Output isn't correct
5 Halted 0 ms 0 KB -