結果
問題 | No.2036 Max Middle |
ユーザー |
![]() |
提出日時 | 2022-09-16 13:37:22 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 192 ms / 2,000 ms |
コード長 | 1,456 bytes |
コンパイル時間 | 489 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 124,160 KB |
最終ジャッジ日時 | 2024-12-21 09:00:10 |
合計ジャッジ時間 | 4,700 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 17 |
ソースコード
class SegmentTree(object):def __init__(self, A, dot, unit):n = 1 << (len(A) - 1).bit_length()tree = [unit] * (2 * n)for i, v in enumerate(A):tree[i + n] = vfor i in range(n - 1, 0, -1):tree[i] = dot(tree[i << 1], tree[i << 1 | 1])self._n = nself._tree = treeself._dot = dotself._unit = unitdef __getitem__(self, i):return self._tree[i + self._n]def update(self, i, v):i += self._nself._tree[i] = vwhile i != 1:i >>= 1self._tree[i] = self._dot(self._tree[i << 1], self._tree[i << 1 | 1])def add(self, i, v,ope):self.update(i, ope(self[i],v))def sum(self, l, r): #これで[l,r)から取り出す。l += self._nr += self._nl_val = r_val = self._unitwhile l < r:if l & 1:l_val = self._dot(l_val, self._tree[l])l += 1if r & 1:r -= 1r_val = self._dot(self._tree[r], r_val)l >>= 1r >>= 1return self._dot(l_val, r_val)N = int(input())A = list(map(int,input().split()))B = []for i in range(N-1):if A[i] < A[i+1]:B.append(1)else:B.append(0)ans = 0seg = SegmentTree(B,lambda x,y:x+y,0)for i in range(len(B)):if seg[i] == 0:ans += seg.sum(0,i)print(ans)