제출 #129364

#제출 시각아이디문제언어결과실행 시간메모리
129364LatinaThe Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
1188 ms54976 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2019; int H, W; int A[N][N]; int gmax, gmin; void flipRow() { for (int i = 0; i < H/2; i++) for (int j = 0; j < W; j++) swap(A[i][j], A[H-i-1][j]); } void flipCol() { for (int i = 0; i < H; i++) for (int j = 0; j < W/2; j++) swap(A[i][j], A[i][W-j-1]); } bool check(int t) { int sp = 0; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) if (A[i][j] < gmax-t) sp = max(sp,j+1); for (int j = 0; j < W; j++) if (gmin+t < A[i][j]) if (j < sp) return false; } return true; } int solve() { int l = 0, r = gmax-gmin; while (l < r) { int mid = (l+r)/2; if (check(mid)) r = mid; else l = mid+1; } return l; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> H >> W; for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) cin >> A[i][j]; gmin = gmax = A[0][0]; for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) { gmin = min(gmin,A[i][j]); gmax = max(gmax,A[i][j]); } int ans = solve(); flipRow(); ans = min(ans,solve()); flipCol(); ans = min(ans,solve()); flipRow(); ans = min(ans,solve()); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...