結果
問題 | No.1332 Range Nearest Query |
ユーザー |
![]() |
提出日時 | 2021-01-08 23:11:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,385 ms / 2,500 ms |
コード長 | 1,563 bytes |
コンパイル時間 | 531 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 212,924 KB |
最終ジャッジ日時 | 2024-11-16 16:30:56 |
合計ジャッジ時間 | 68,435 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 48 |
ソースコード
import sysfrom bisect import bisectread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesINF = 1 << 30def main(V, query):def merge(A, B):return CN = len(V)seg = [None for _ in range(N + N)]for i in range(N):seg[N + i] = [V[i]]for k in range(N - 1, 0, -1):A, B = seg[k + k], seg[k + k + 1]NA, NB = len(A), len(B)i, j = 0, 0C = [0] * (NA + NB)for c in range(NA + NB):if i == NA:C[c] = B[j]j += 1elif j == NB:C[c] = A[i]i += 1else:if A[i] > B[j]:C[c] = B[j]j += 1else:C[c] = A[i]i += 1seg[k] = Cdef 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 = zip(m, m, m)main(X, query)