Submission #1180247

#TimeUsernameProblemLanguageResultExecution timeMemory
1180247user736482The Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
1134 ms31904 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000009
#define INF 1000000019
#define INFL 1000000000000000099LL

ll n,q,s,t,a,b,c,d,ans,k,m;
ll co[2007][2007],co2[2007][2007];
ll ile[2007][2];
ll mn=INFL,mx;

bool czyp(ll x){
 //  for(ll i=0;i<n;i++){
  //      for(ll j=0;j<m;j++)cout<<co[i][j]<<" ";
 //       cout<<"\n";
//    }
    ile[0][1]=INF;
    ile[0][0]=-1;
    for(ll i=0;i<n;i++){
        ll r=-1;
        ll l=INF;
        for(ll j=0;j<m;j++){
            if(co[i][j]-mn>x){
                r=max(r,j);
                
            }
            if(mx-co[i][j]>x){
                l=min(l,j);
            }
        }
    //    ile[i+1][0]=max(ile[i][0],r);
        ile[i+1][1]=min(ile[i][1],l);
        ile[i+1][0]=r;
   //     cout<<l<<" "<<r<<" "<<ile[i+1][1]<<" "<<ile[i+1][0]<<"\n";
       // if(ile[i+1][1]<=ile[i+1][0])return 0;
    }
    for(ll i=n-1;i>=0;i--){
        ile[i+1][1]=max(ile[i+1][1],ile[i+2][1]);
        if(ile[i+1][1]<=ile[i+1][0])return 0;
    }
    return 1;

}
void flipx(){
    for(ll i=0;i<n;i++){
        for(ll j=0;j<m/2;j++){
            swap(co[i][j],co[i][m-1-j]);
        }
            
    }
}
void flipy(){
    for(ll i=0;i<m;i++){
        for(ll j=0;j<n/2;j++){
            swap(co[j][i],co[n-1-j][i]);
        }
    }
}
bool czy(ll x){
   // cout<<"\n\n"<<x;
    if(czyp(x))return 1;
    flipx();
    if(czyp(x))return 1;
    flipy();
    if(czyp(x))return 1;
    flipx();
    if(czyp(x))return 1;
    flipx();
    //cout<<"xd";
    return 0;
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;
    for(ll i=0;i<n;i++){
        for(ll j=0;j<m;j++){
            cin>>co[i][j];
            mn=min(mn,co[i][j]);
            mx=max(mx,co[i][j]);
        }
    }
    ll pocz=0;
    ll kon=1000000000;
    while(pocz!=kon){
        ll mid=(pocz+kon)/2;
        if(czy(mid))
            kon=mid;
        else
            pocz=mid+1;
    }
    cout<<pocz;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...