結果
問題 |
No.3072 Speedrun Query
|
ユーザー |
|
提出日時 | 2025-03-26 10:26:37 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,162 ms / 2,500 ms |
コード長 | 1,487 bytes |
コンパイル時間 | 358 ms |
コンパイル使用メモリ | 82,748 KB |
実行使用メモリ | 185,580 KB |
最終ジャッジ日時 | 2025-03-26 10:27:05 |
合計ジャッジ時間 | 26,611 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
ソースコード
from collections import deque def bfs01(A, s): dist = [1 << 60] * (N + 2) dist[s] = 0 que = deque([s]) while que: v = que.popleft() for nv in g[v]: if nv >= N or v >= N: if dist[nv] > dist[v]: dist[nv] = dist[v] que.appendleft(nv) else: if dist[nv] > dist[v] + 1: dist[nv] = dist[v] + 1 que.append(nv) return dist N, KA, KB = map(int, input().split()) A = [int(x) - 1 for x in input().split()] B = [int(x) - 1 for x in input().split()] g = [[] for _ in range(N + 2)] for i in range(N - 1): g[i].append(i + 1) g[i + 1].append(i) for a in A: g[N].append(a) g[a].append(N) for b in B: g[N + 1].append(b) g[b].append(N + 1) distA = bfs01(A, N) distB = bfs01(B, N + 1) INF = 1 << 60 la = [-INF] * N ra = [INF] * N lb = [-INF] * N rb = [INF] * N i = 0 for a in A: while i <= a: ra[i] = a i += 1 i = N - 1 for a in A[::-1]: while i >= a: la[i] = a i -= 1 i = 0 for b in B: while i <= b: rb[i] = b i += 1 i = N - 1 for b in B[::-1]: while i >= b: lb[i] = b i -= 1 Q = int(input()) for _ in range(Q): s, t = map(int, input().split()) s, t = s - 1, t - 1 res1 = t - s res2 = min(s - la[s], ra[s] - s) + distA[t] res3 = min(s - lb[s], rb[s] - s) + distB[t] print(min(res1, res2, res3))