結果
問題 | No.489 株に挑戦 |
ユーザー |
|
提出日時 | 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 |
ソースコード
from collections import defaultdictfrom bisect import bisect_leftclass SegmentTree:def __init__(self, N, mode):n_ = 1while n_ < N:n_ *= 2self.n = n_self.mode = modeif 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 - 1self.arr[k] = awhile k > 0:k = (k - 1) // 2self.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.nif self.mode == min:res = 2**31-1else:res = -2**31+1while L < R:if R & 1:R -= 1res = self.mode(res, self.arr[R-1])if L & 1:res = self.mode(res, self.arr[L-1])L += 1L >>= 1R >>= 1return resN, 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 = 0s, e = None, Nonefor i in range(N-1):before = x[i]after = st.query(i+1, min(N, i+1+D))profit = (after - before) * Kif profit > ans:s = iindex = bisect_left(d[after], i)e = d[after][index]ans = profitprint(ans)if ans > 0:print(s, e)