結果
問題 | No.703 ゴミ拾い Easy |
ユーザー |
![]() |
提出日時 | 2018-06-15 23:54:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 812 ms / 1,500 ms |
コード長 | 1,187 bytes |
コンパイル時間 | 406 ms |
コンパイル使用メモリ | 82,476 KB |
実行使用メモリ | 197,744 KB |
最終ジャッジ日時 | 2025-01-02 13:53:54 |
合計ジャッジ時間 | 14,222 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 46 |
ソースコード
N = int(input())*A, = map(int, input().split())*X, = map(int, input().split())*Y, = map(int, input().split())N0 = 2**(N-1).bit_length()A = A + [10**6] * (N0 - N)data = [None]*(2*N0+1)# Li Chao Treedef f(line, x):p, q = linereturn p*x + qdef _add_line(line, k, l, r):m = (l + r) // 2if data[k] is None:data[k] = linereturnlx = A[l]mx = A[m]rx = A[r-1]left = (f(line, lx) < f(data[k], lx))mid = (f(line, mx) < f(data[k], mx))right = (f(line, rx) < f(data[k], rx))if left and right:data[k] = linereturnif not left and not right:returnif mid:data[k], line = line, data[k]if left != mid:_add_line(line, 2*k+1, l, m)else:_add_line(line, 2*k+2, m, r)def add_line(line):return _add_line(line, 0, 0, N0)def query(k, x):def gen(k, x):k += N0-1while k >= 0:if data[k]:yield f(data[k], x)k = (k - 1) // 2return min(gen(k, x))v = 0for i in range(N):x = X[i]; a = A[i]; y = Y[i]add_line((-2*x, x**2 + y**2 + v))v = query(i, a) + a**2print(v)