結果
| 問題 | No.2930 Larger Mex |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-11-11 19:36:24 |
| 言語 | PyPy3 (8.0.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 235 ms / 2,000 ms |
| + 210µs | |
| コード長 | 1,799 bytes |
| 記録 | |
| コンパイル時間 | 96 ms |
| コンパイル使用メモリ | 64,528 KB |
| 実行使用メモリ | 95,452 KB |
| 最終ジャッジ日時 | 2026-11-11 19:36:42 |
| 合計ジャッジ時間 | 14,476 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 51 |
ソースコード
from itertools import accumulate
class SegTree:
def __init__(self, op, e, v):
n = len(v)
log = 0
while (1 << log) < n:
log += 1
size = 1 << log
d = [e] * (2 * size)
for i in range(n):
d[size + i] = v[i]
self._op = op
self._e = e
self._n = n
self._log = log
self._size = size
self._d = d
for i in range(self._size - 1, 0, -1):
self._update(i)
def _update(self, k):
self._d[k] = self._op(self._d[2 * k], self._d[2 * k + 1])
def set(self, p, x):
p += self._size
self._d[p] = x
for i in range(1, self._log + 1):
self._update(p >> i)
def get(self, p):
return self._d[p + self._size]
def prod(self, l, r):
sml = self._e
smr = self._e
l += self._size
r += self._size
while l < r:
if l & 1:
sml = self._op(sml, self._d[l])
l += 1
if r & 1:
r -= 1
smr = self._op(self._d[r], smr)
l >>= 1
r >>= 1
return self._op(sml, smr)
def all_prod(self):
return self._d[1]
def op(x, y):
return min(x, y)
N, M = (int(x) for x in input().split())
A = list(map(int, input().split()))
if M == 0:
for i in range(N):
print(N-i)
exit()
INF = 10**19
seg = SegTree(op, INF, [-1]*M)
ans = [0]*N
for num, i in enumerate(A):
if i <= M-1:
seg.set(i, num)
m_idx = seg.prod(0, M)
if m_idx <= -1:
continue
else:
l, r = num-m_idx+1, num+1
ans[l-1] += 1
if r < N:
ans[r] -= 1
ans = list(accumulate(ans))
for i in ans:
print(i)