結果
| 問題 |
No.844 split game
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-12-25 15:35:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,555 bytes |
| コンパイル時間 | 177 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 92,608 KB |
| 最終ジャッジ日時 | 2024-09-25 03:12:13 |
| 合計ジャッジ時間 | 13,549 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 WA * 30 |
ソースコード
import sys
input = sys.stdin.readline
class SegmentTree:
def __init__(self, N, func, ele):
n_ = 1
while n_<N:
n_ *= 2
self.n = n_
self.func = func
self.ele = ele
self.arr = [self.ele]*(2*self.n-1)
def update(self, k, a):
k += self.n-1
self.arr[k] = a
while k>0:
k = (k-1)//2
self.arr[k] = self.func(self.arr[2*k+1], self.arr[2*k+2])
def query(self, l, r):
L, R = l+self.n, r+self.n
res = self.ele
while L<R:
if R&1:
R -= 1
res = self.func(res, self.arr[R-1])
if L&1:
res = self.func(res, self.arr[L-1])
L += 1
L >>= 1
R >>= 1
return res
N, M, A = map(int, input().split())
lrp = [tuple(map(int, input().split())) for _ in range(M)]
lrp.sort(key=lambda k: k[0])
dp = [0]*N
st = SegmentTree(N, max, -10**18)
for i in range(N):
st.update(i, 0)
ans = 0
for li, ri, pi in lrp:
li -= 1
ri -= 1
if li==0:
dp[ri] = max(dp[ri], pi-A)
else:
if dp[li-1]>0:
dp[ri] = max(dp[ri], dp[li-1]+pi-A)
else:
dp[ri] = max(dp[ri], pi-2*A)
if li>1:
dp[ri] = max(dp[ri], st.query(0, li-1)+pi-2*A)
if ri==N-1:
dp[ri] += A
st.update(ri, dp[ri])
ans = max(ans, dp[ri])
print(ans)