結果
| 問題 |
No.2786 RMQ on Grid Path
|
| コンテスト | |
| ユーザー |
kemuniku
|
| 提出日時 | 2024-05-30 19:12:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 3,919 ms / 6,000 ms |
| コード長 | 1,123 bytes |
| コンパイル時間 | 424 ms |
| コンパイル使用メモリ | 82,068 KB |
| 実行使用メモリ | 362,892 KB |
| 最終ジャッジ日時 | 2024-06-14 20:52:09 |
| 合計ジャッジ時間 | 66,919 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 35 |
ソースコード
import sys
input = sys.stdin.readline
H,W = map(int,input().split())
A = [list(map(int,input().split())) for i in range(H)]
sets = [[{(i,j)} for j in range(W)] for i in range(H)]
query = [[[] for i in range(W)] for i in range(H)]
Q = int(input())
for i in range(Q):
rs,cs,rt,ct = map(lambda x: int(x)-1,input().split())
query[rs][cs].append((rt,ct,i))
query[rt][ct].append((rs,cs,i))
ans = [-1]*Q
def unite(ai,aj,bi,bj,cost):
if sets[bi][bj] is sets[ai][aj]:
return
if len(sets[ai][aj]) < len(sets[bi][bj]):
ai,bi = bi,ai
aj,bj = bj,aj
for (i,j) in sets[bi][bj]:
for t in query[i][j]:
if (t[0],t[1]) in sets[ai][aj]:
ans[t[2]] = cost
for (i,j) in sets[bi][bj]:
sets[ai][aj].add((i,j))
sets[i][j] = sets[ai][aj]
edges = []
for i in range(H):
for j in range(W):
for di,dj in ((0,1),(1,0)):
if 0 <= i+di < H and 0 <= j+dj < W:
edges.append((max(A[i][j],A[i+di][j+dj]),i,j,i+di,j+dj))
edges.sort()
for cost,ai,aj,bi,bj in edges:
unite(ai,aj,bi,bj,cost)
print(*ans,sep="\n")
kemuniku