結果
| 問題 | No.2408 Lakes and Fish | 
| コンテスト | |
| ユーザー |  norioc | 
| 提出日時 | 2025-06-10 23:31:05 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 280 ms / 2,000 ms | 
| コード長 | 743 bytes | 
| コンパイル時間 | 517 ms | 
| コンパイル使用メモリ | 82,844 KB | 
| 実行使用メモリ | 105,284 KB | 
| 最終ジャッジ日時 | 2025-06-10 23:31:12 | 
| 合計ジャッジ時間 | 7,074 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 19 | 
ソースコード
from bisect import bisect_left
def find_nearest(a: list[int], v: int) -> int:
    """ソート済みリスト a の要素のうち、v との差が最も小さい要素を返す"""
    assert len(a) > 0
    p = bisect_left(a, v)
    if p == len(a):
        return a[-1]
    if p > 0 and v-a[p-1] <= a[p]-v:
        return a[p-1]
    return a[p]
N, M = map(int, input().split())
L = list(map(int, input().split()))
xs = []
for _ in range(M):
    F, B, W = map(int, input().split())
    xs.append((F, B, W))
lakes = set(L)
ans = 0
for f, b, w in xs:
    t = 0
    if f in lakes:
        t = w
    else:
        t = b
        # 水に移動する
        d = abs(f - find_nearest(L, f))
        t = max(t, w - d)
    ans += t
print(ans)
            
            
            
        