제출 #1161997

#제출 시각아이디문제언어결과실행 시간메모리
1161997brover29The Kingdom of JOIOI (JOI17_joioi)C++17
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=2005;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll  n,m,a[N][N],b[N][N],mn=1e18,mx=-1e18,c[N][N];
bool is_good(){
    bool ok=1;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            ok&=(c[i][j]&b[i][j])==(c[i][j]);
            ok&=((c[i][j]>=c[i-1][j])&(c[i][j]>=c[i][j-1]));
        }
    }return ok;
}void clr(){
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            c[i][j]=2;
        }
    }
}
bool check(ll x){
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            b[i][j]=0;
            b[i][j]|=(a[i][j]<=mn+x);
            b[i][j]|=2*(a[i][j]>=mx-x);
            if(!b[i][j])return 0;
        }
    }clr();
    ll cur=m;
    for(ll i=1;i<=n;i++){

        for(ll j=1;j<=cur;j++){
            if(!(b[i][j]&1)){
                cur=j-1;
                break;
            }
            c[i][j]=1;
        }
    }
    if(is_good())return 1;
    clr();
    cur=m;
    for(ll i=n;i>=1;i--){
        for(ll j=1;j<=cur;j++){
            if(!(b[i][j]&1)){
                cur=j-1;
                break;
            }
            c[i][j]=1;
        }
    }
    if(is_good())return 1;
    clr();
    cur=n;
    for(ll j=1;j<=m;j++){
        for(ll i=1;i<=cur;i++){
            if(!(b[i][j]&1)){
                cur=i-1;
                break;
            }
            c[i][j]=1;
        }
    }if(is_good())return 1;
    clr();
    cur=n;
    for(ll j=m;j>=1;j--){
        for(ll i=1;i<=cur;i++){
            if(!(b[i][j]&1)){
                cur=i-1;
                break;
            }
            c[i][j]=1;
        }
    }if(is_good())return 1;
    return 0;

}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n>>m;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            cin>>a[i][j];
            mn=min(mn,a[i][j]);
            mx=max(mx,a[i][j]);
        }
    }
    ll l=1,r=1e9;
    while(l<r){
        ll mid=(r+l)>>1;
        if(check(mid))r=mid;
        else l=mid+1;
    }
    cout<<l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...