結果
問題 | No.1332 Range Nearest Query |
ユーザー |
![]() |
提出日時 | 2021-01-08 22:51:26 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,547 bytes |
コンパイル時間 | 368 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 455,036 KB |
最終ジャッジ日時 | 2024-12-11 03:34:19 |
合計ジャッジ時間 | 79,668 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 47 TLE * 1 |
ソースコード
import sysfrom bisect import bisectread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesINF = 1 << 30def main(V, query):def merge(C, A, B):NA, NB = len(A), len(B)i, j = 0, 0for _ in range(NA + NB):if i == NA:C.append(B[j])j += 1elif j == NB:C.append(A[i])i += 1else:if A[i] > B[j]:C.append(B[j])j += 1else:C.append(A[i])i += 1return CN = len(V)seg = [[] for _ in range(N + N)]for i in range(N):seg[N + i].append(V[i])for i in range(N - 1, 0, -1):merge(seg[i], seg[i + i], seg[i + i + 1])def nearest(A, x):n = len(A)i = bisect(A, x)v = INFif i > 0:v = x - A[i - 1]if i < n:v = min(v, A[i] - x)return vfor L, R, x in query:L -= 1L += NR += Nv = INFwhile L < R:if L & 1:v = min(v, nearest(seg[L], x))L += 1if R & 1:R -= 1v = min(v, nearest(seg[R], x))L, R = L >> 1, R >> 1print(v)N = int(readline())X = tuple(map(int, readline().split()))Q = int(readline())m = map(int, read().split())query = tuple(zip(m, m, m))main(X, query)