結果

問題 No.489 株に挑戦
ユーザー roaris
提出日時 2019-08-21 19:28:38
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 286 ms / 1,000 ms
コード長 1,635 bytes
コンパイル時間 164 ms
コンパイル使用メモリ 82,096 KB
実行使用メモリ 97,084 KB
最終ジャッジ日時 2024-07-20 00:16:39
合計ジャッジ時間 6,872 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

from collections import defaultdict
from bisect import bisect_left
class SegmentTree:
def __init__(self, N, mode):
n_ = 1
while n_ < N:
n_ *= 2
self.n = n_
self.mode = mode
if self.mode == min:
self.arr = [2**31-1] * (2*self.n - 1)
elif self.mode == max:
self.arr = [-2**31+1] * (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.mode(self.arr[2*k+1], self.arr[2*k+2])
def query(self, l, r):
L, R = l + self.n, r + self.n
if self.mode == min:
res = 2**31-1
else:
res = -2**31+1
while L < R:
if R & 1:
R -= 1
res = self.mode(res, self.arr[R-1])
if L & 1:
res = self.mode(res, self.arr[L-1])
L += 1
L >>= 1
R >>= 1
return res
N, D, K = map(int, input().split())
x = [int(input()) for _ in range(N)]
st = SegmentTree(N, max)
d = defaultdict(list)
for i in range(N):
st.update(i, x[i])
d[x[i]].append(i)
ans = 0
s, e = None, None
for i in range(N-1):
before = x[i]
after = st.query(i+1, min(N, i+1+D))
profit = (after - before) * K
if profit > ans:
s = i
index = bisect_left(d[after], i)
e = d[after][index]
ans = profit
print(ans)
if ans > 0:
print(s, e)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0