結果

問題 No.1012 荷物収集
ユーザー norioc
提出日時 2025-06-12 03:21:01
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,244 ms / 2,000 ms
コード長 831 bytes
コンパイル時間 658 ms
コンパイル使用メモリ 82,536 KB
実行使用メモリ 125,480 KB
最終ジャッジ日時 2025-06-12 03:21:29
合計ジャッジ時間 24,163 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
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 = INF
    for x, e, i in events:
        if e == QUERY:
            if prev_x != INF:
                dx = abs(x - prev_x)
                ans[i] += cost + dx * w
        elif e == ITEM:
            if prev_x != INF:
                dx = abs(x - prev_x)
                cost += dx * w

            w += items[i][1]
            prev_x = x


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

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