Submission #647130

#TimeUsernameProblemLanguageResultExecution timeMemory
647130beaconmcThe Kingdom of JOIOI (JOI17_joioi)Pypy 3
0 / 100
51 ms18500 KiB
from copy import * n,m = map(int, input().split()) grid = [list(map(int, input().split()))for i in range(n)] grid2 = [[0 for i in range(m)]for i in range(n)] mx = -1 for i in range(n): for j in range(m): mx = max(mx, grid[i][j]) grid2[i][j] = grid[n-i-1][m-j-1] minmaxl = [[1000000000 for i in range(m)]for i in range(n)] minmaxr = [[1000000000 for i in range(m)]for i in range(n)] def setup(): for i in range(n-1,-1,-1): minmaxl[i][0] = grid[i][0] for j in range(1,m): minmaxl[i][j] = min(minmaxl[i][j-1], grid[i][j]) if i != n-1: for j in range(m): minmaxl[i][j] = min(minmaxl[i][j], minmaxl[i+1][j]) def check(a): mini = float("inf") maxi = -1 for i in range(n): for j in range(m): if mx - minmaxl[i][j] > a: mini = min(mini, grid[i][j]) maxi = max(maxi, grid[i][j]) if maxi - mini <= a: return True mini = float("inf") maxi = -1 for i in range(n): for j in range(m): if mx - minmaxr[i][j] > a: mini = min(mini, grid[i][j]) maxi = max(maxi, grid[i][j]) if maxi - mini <= a: return True return False setup() lo = 0 hi = mx while (lo<hi): mid = (lo+hi)//2 if check(mid): hi = mid else: lo = mid+1 ans = lo grid = deepcopy(grid2) minmaxl = [[1000000000 for i in range(m)]for i in range(n)] minmaxr = [[1000000000 for i in range(m)]for i in range(n)] setup() lo = 0 hi =mx while (lo<hi): mid = (lo+hi)//2 if check(mid): hi = mid else: lo = mid+1 print(min(ans,lo))
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...