제출 #537062

#제출 시각아이디문제언어결과실행 시간메모리
537062qwerasdfzxclThe Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
2947 ms31852 KiB
    #include <bits/stdc++.h>
    using namespace std;
     
    int n, m, mn = 1e9, a[2010][2010], b[2010][2010];
     
    void rot(){
    	for(int i = 1; i <= n; i++){
    		for(int j = 1; j <= m; j++){
    			b[j][n + 1 - i] = a[i][j];
    		}
    	}
    	swap(n, m);
    	for(int i = 1; i <= n; i++){
    		for(int j = 1; j <= m; j++){
    			a[i][j] = b[i][j];
    		}
    	}
    }
     
    int can(int k){
    	for(int dum = 0; dum < 4; dum++){
    		int lst = m, omx = 0, omn = 1e9;
    		for(int i = 1; i <= n; i++){
    			for(int j = 1; j <= lst; j++){
    				if(a[i][j] > mn + k){ lst = j - 1; break; }
    			}
    			for(int j = lst + 1; j <= m; j++){
    				omx = max(omx, a[i][j]);
    				omn = min(omn, a[i][j]);
                    if(omx - omn > k) break;
    			}
                if(omx - omn > k) break;
    		}
    		if(omx - omn <= k) return 1;
    		if(dum < 3) rot();
    	}
    	return 0;
    }
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cin >> n >> m;
    	for(int i = 1; i <= n; i++){
    		for(int j = 1; j <= m; j++){
    			cin >> a[i][j];
                mn = min(mn, a[i][j]);
    		}
    	}
    	int s = 0, e = 1e9;
    	while(s <= e){
    		int mid = (s + e) / 2;
    		if(can(mid)) e = mid - 1;
    		else s = mid + 1;
    	}
    cout << s << '\n';
    }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...