結果

問題 No.1012 荷物収集
ユーザー norioc
提出日時 2025-06-12 09:53:51
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,320 ms / 2,000 ms
コード長 698 bytes
コンパイル時間 523 ms
コンパイル使用メモリ 82,248 KB
実行使用メモリ 125,928 KB
最終ジャッジ日時 2025-06-12 09:54:16
合計ジャッジ時間 23,345 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #

QUERY = 0
ITEM = 1
INF = 1 << 60
N, Q = map(int, input().split())

events = []
items = []
for i in range(N):
    x, w = map(int, input().split())
    items.append((x, w))
    events.append((x, ITEM, i))

X = list(map(int, input().split()))
for i, x in enumerate(X):
    events.append((x, QUERY, i))


def scan(events):
    w = 0
    cost = 0
    prev_x = 0
    for x, e, i in events:
        dx = abs(x - prev_x)
        cost += dx * w
        prev_x = x
        if e == QUERY:
            ans[i] += cost
        elif e == ITEM:
            w += items[i][1]


ans = [0] * Q
# 左側から
scan(sorted(events))
# 右側から
scan(sorted(events, key=lambda x: (-x[0], x[1])))

print(*ans, sep='\n')
0