提出 #3974012
ソースコード 拡げる
N = int(input())
*H, = map(int, input().split())
*A, = map(int, input().split())
N0 = 2**(N).bit_length()
INF = 2**31-1
data = [-INF]*(2*N0)
def update(k, x):
k += N0-1
data[k] = x
while k >= 0:
k = (k - 1) // 2
data[k] = max(data[2*k+1], data[2*k+2])
def query(l, r):
L = l + N0; R = r + N0
s = -INF
while L < R:
if R & 1:
R -= 1
s = max(s, data[R-1])
if L & 1:
s = max(s, data[L-1])
L += 1
L >>= 1; R >>= 1
return s
*I, = range(N)
I.sort(key=lambda x: (H[x], x))
ans = 0
update(0, 0)
for i in I:
v = query(0, i+1) + A[i]
ans = max(ans, v)
update(i+1, v)
print(ans)
提出情報
| 提出日時 | |
|---|---|
| 問題 | Q - Flowers |
| ユーザ | yaketake08 |
| 言語 | PyPy3 (2.4.0) |
| 得点 | 100 |
| コード長 | 732 Byte |
| 結果 | AC |
| 実行時間 | 1333 ms |
| メモリ | 128664 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 0_00 | AC | 173 ms | 38768 KiB |
| 0_01 | AC | 163 ms | 38256 KiB |
| 0_02 | AC | 166 ms | 38256 KiB |
| 0_03 | AC | 172 ms | 38256 KiB |
| 1_00 | AC | 166 ms | 38256 KiB |
| 1_01 | AC | 616 ms | 128664 KiB |
| 1_02 | AC | 605 ms | 123160 KiB |
| 1_03 | AC | 625 ms | 123288 KiB |
| 1_04 | AC | 812 ms | 123160 KiB |
| 1_05 | AC | 847 ms | 123160 KiB |
| 1_06 | AC | 897 ms | 123160 KiB |
| 1_07 | AC | 911 ms | 123160 KiB |
| 1_08 | AC | 991 ms | 123160 KiB |
| 1_09 | AC | 989 ms | 123288 KiB |
| 1_10 | AC | 1304 ms | 122144 KiB |
| 1_11 | AC | 1297 ms | 122264 KiB |
| 1_12 | AC | 1302 ms | 122144 KiB |
| 1_13 | AC | 1319 ms | 123160 KiB |
| 1_14 | AC | 1279 ms | 122264 KiB |
| 1_15 | AC | 1289 ms | 123160 KiB |
| 1_16 | AC | 1292 ms | 123160 KiB |
| 1_17 | AC | 1333 ms | 123160 KiB |