結果
| 問題 |
No.1435 Mmm......
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-03-20 00:12:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,680 ms / 2,000 ms |
| コード長 | 2,204 bytes |
| コンパイル時間 | 176 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 112,716 KB |
| 最終ジャッジ日時 | 2024-11-19 03:17:45 |
| 合計ジャッジ時間 | 28,580 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 24 |
ソースコード
import sys
input = lambda : sys.stdin.readline().rstrip()
sys.setrecursionlimit(2*10**5+10)
write = lambda x: sys.stdout.write(x+"\n")
debug = lambda x: sys.stderr.write(x+"\n")
# 二分探索木の代わり BST HST
# 存在しない要素に対するremoveはこないことを仮定している
"""↓より少し遅い(?)が、同一要素を複数入れた場合に数を保持するd
"""
from heapq import heappop as hpp, heappush as hp
# 二分探索木の代わり BST HST
# 存在しない要素に対するremoveはこないことを仮定している
"""↓より少し遅い(?)が、同一要素を複数入れた場合に数を保持するd
"""
from heapq import heappop as hpp, heappush as hp
class HST:
def __init__(self, s=1):
self._h = []
self._q = []
self._s = s
def push(self, v):
hp(self._h, self._s*v)
def remove(self, v):
hp(self._q, self._s*v)
def top(self):
while self._q and self._q[0]==self._h[0]:
hpp(self._q)
hpp(self._h)
if not self._h:
res = None
else:
res = self._s*self._h[0]
return res
def second(self):
v = self.top()
if v is None:
return None
self.remove(v)
v2 = self.top()
if v2 is not None:
v2 *= self._s
self.push(v)
return v2
n = int(input())
a = list(map(int, input().split()))
from heapq import heappop as hpp, heappush as hp
h = HST()
H = HST(s=-1)
j = 0
ans = 0
ans0 = 0
for i in range(n):
mi = 0
while j<n:
if j-i>=3:
m0 = h.top()
m1 = h.second()
M = H.top()
if m0+m1>=M:
pass
else:
break
h.push(a[j])
H.push(a[j])
j += 1
m0 = h.top()
m1 = h.second()
M = H.top()
if m1 is not None and m0+m1<M:
ans += (j-i-2)
else:
ans += (j-i-1)
h.remove(a[i])
H.remove(a[i])
# l = sorted(a[i:j])
# if l[0]+l[1]<l[-1]:
# ans0 += (j-i-2)
# else:
# ans0 += (j-i-1)
# if ans!=ans0:
# print(m0,m1,-M)
# assert 0
print(ans)