Submission #233451

#TimeUsernameProblemLanguageResultExecution timeMemory
233451nicolaalexandraThe Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
3022 ms35832 KiB
#include <bits/stdc++.h>
#define DIM 2010
#define DIMBUFF 30000000
#define INF 2000000000
using namespace std;
int a[DIM][DIM],b[DIM][DIM],viz[DIM][DIM];
struct idk{
    int val,l,c;
} v[DIM*DIM];
pair<int,int> c[DIM*DIM];
int di[] = {-1,1,0,0};
int dj[] = {0,0,-1,1};
int n,m,i,j,sol,mini,maxi,k,pos;
char buff[DIMBUFF];

int verif (int val){

    int last = 0;
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            if (a[i][j] < maxi - val)
                last = max(last,j);
        }

        for (j=1;j<=m;j++)
            if (a[i][j] > mini + val && j <= last)
                return 0;
    }

    return 1;
}

void solve (){

    int st = 0, dr = maxi - mini, val = INF;
    while (st <= dr){
        int mid = (st+dr)>>1;
        if (verif (mid)){
            val = mid;
            dr = mid-1;
        } else st = mid+1;
    }

    sol = min (sol,val);

}

inline int cmp (idk a, idk b){
    return a.val < b.val;
}


void roteste_linii(){
    for (i=1;i<=n/2;i++)
        for (j=1;j<=m;j++)
            swap (a[i][j],a[n-i+1][j]);
}
void roteste_coloane(){
    for (i=1;i<=n;i++)
        for (j=1;j<=m/2;j++)
            swap (a[i][j],a[i][m-j+1]);
}

int get_nr(){
    while (!(buff[pos] >= '0' && buff[pos] <= '9'))
        ++pos;
    int nr = 0;
    while (buff[pos] >= '0' && buff[pos] <= '9'){
        nr = nr*10 + buff[pos] - '0';
        ++pos;
    }
    return nr;
}
int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n>>m;

    mini = INF;
    for (i=1;i<=n;++i)
        for (j=1;j<=m;++j){
            cin>>a[i][j];
            mini = min (mini,a[i][j]);
            maxi = max (maxi,a[i][j]);
           // v[++k] = {a[i][j],i,j};
        }

    //sort (v+1,v+k+1,cmp);

    sol = INF;
    solve();

    roteste_linii();
    solve();

    roteste_coloane();
    solve();

    roteste_linii();
    solve();

    cout<<sol;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...