結果

問題 No.3424 Shooting Game
コンテスト
ユーザー detteiuu
提出日時 2026-01-29 18:09:06
言語 PyPy3
(7.3.17)
結果
AC  
実行時間 397 ms / 2,000 ms
コード長 1,336 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 295 ms
コンパイル使用メモリ 82,348 KB
実行使用メモリ 103,472 KB
最終ジャッジ日時 2026-01-29 18:09:15
合計ジャッジ時間 6,276 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from sys import stdin
input = stdin.readline

def op(x, y):
    return max(x, y)
class SegTree:
    def __init__(self, init_val, op, ide_ele):
        n = len(init_val)
        self.n = n
        self.op = op
        self.ide_ele = ide_ele
        self.num = 1 << (n - 1).bit_length()
        self.tree = [ide_ele] * 2 * self.num
        for i in range(n):
            self.tree[self.num + i] = init_val[i]

    def update(self, l, r, x):
        l += self.num
        r += self.num
        while l < r:
            if l & 1:
                self.tree[l] = self.op(x, self.tree[l])
                l += 1
            if r & 1:
                self.tree[r - 1] = self.op(x, self.tree[r - 1])
            l >>= 1
            r >>= 1

    def query(self, k):
        ans = self.ide_ele
        k += self.num
        ans = self.op(ans, self.tree[k])
        while k > 1:
            ans = self.op(ans, self.tree[k>>1])
            k >>= 1
        return ans

INF = 1<<60

N, T = map(int, input().split())
LRP = [list(map(int, input().split())) for _ in range(N)]

seg = SegTree([0]*(10**5*2+1), op, -INF)
for L, R, P in LRP:
    seg.update(L, R+1, P)

dp = [-INF]*(10**5*2+2)
dp[0] = 0
for i in range(10**5*2+1):
    dp[i+1] = max(dp[i+1], dp[i])
    dp[min(i+T, 10**5*2+1)] = max(dp[min(i+T, 10**5*2+1)], dp[i]+seg.query(i))

print(dp[-1])
0