Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- class Field:
- def __init__(self, R, C):
- mat = []
- for r in range(R):
- mat.append( [0] * C)
- self.mat = mat
- self.R = R
- self.C = C
- def cell(self, r, c):
- if r < 0 or r >= self.R or c < 0 or c >= self.C:
- return 0
- return self.mat[r][c]
- def __str__(self):
- return str(self.mat)
- def __repr__(self):
- return self.mat.__repr__()
- def solve(fp):
- L = fp.readline().split()
- N, M = int(L[0]), int(L[1])
- field = Field(N, M)
- maxSoFar = []
- for i in range(4):
- maxSoFar.append(Field(N, M))
- for r in range(N):
- L = fp.readline().split()
- for c in range(M):
- v = int(L[c])
- field.mat[r][c] = v
- maxSoFar[LEFT].mat[r][c] = max(v, maxSoFar[LEFT].cell(r, c-1))
- maxSoFar[TOP].mat[r][c] = max(v, maxSoFar[TOP].cell(r-1, c))
- for r in range(N):
- for c in range(M):
- c1 = M - 1 - c
- v = field.mat[r][c1]
- maxSoFar[RIGHT].mat[r][c1] = max(v, maxSoFar[RIGHT].cell(r, c1 + 1))
- r1 = N - 1 - r
- v = field.mat[r1][c]
- maxSoFar[BOTTOM].mat[r1][c] = max(v, maxSoFar[BOTTOM].cell(r1+1, c))
- for r in range(N):
- for c in range(M):
- higher = 0
- v = field.mat[r][c]
- for i in range(4):
- if maxSoFar[i].mat[r][c] > v:
- higher += 1
- if higher == 4:
- #return "NO %d,%d" % (r,c)
- return "NO"
- return "YES"
- fp = open(sys.argv[1])
- T = int(fp.readline())
- LEFT, TOP, RIGHT, BOTTOM = 0, 1, 2, 3
- for testcase in range(1, T+1):
- ans = solve(fp)
- print "Case #%d: %s" % (testcase, ans)
Advertisement
Add Comment
Please, Sign In to add comment