Please sign in first.
			
		
		
	
		Official
		
			
				E - Bingo 2 Editorial
			
			by 
		
		
		
			
		
		
			
	
			
				E - Bingo 2 Editorial
			
			by  toam
toam
			
		
		
		各マスに対して,そのマスに印がつけられるターンを書き込みます(印がつけられない場合は \(\mathrm{inf}\) を書き込むことにします).このとき,ある列がビンゴを達成するターンは,その列に含まれるマスに書かれた数の最大値に等しいです.すべての列に対して,その列が何ターン目にビンゴを達成するかを求め,それらの最小値を答えればよいです.計算量は \(O(N^2+T)\) です.
N, T = map(int, input().split())
A = list(map(lambda x: int(x) - 1, input().split()))
inf = 1 << 30
mat = [[inf] * N for i in range(N)]
for i in range(T):
    x, y = A[i] // N, A[i] % N
    mat[x][y] = i + 1
ans = inf
# 横
for x in range(N):
    mx = 0
    for y in range(N):
        mx = max(mx, mat[x][y])
    ans = min(ans, mx)
# 縦
for y in range(N):
    mx = 0
    for x in range(N):
        mx = max(mx, mat[x][y])
    ans = min(ans, mx)
# 斜め
for x, y, dx, dy in [[0, 0, 1, 1], [0, N - 1, 1, -1]]:
    mx = 0
    for _ in range(N):
        mx = max(mx, mat[x][y])
        x += dx
        y += dy
    ans = min(ans, mx)
if ans == inf:
    ans = -1
print(ans)
				posted:
				
				
				last update:
				
			
