結果
| 問題 |
No.618 labo-index
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:50:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,502 bytes |
| コンパイル時間 | 325 ms |
| コンパイル使用メモリ | 82,216 KB |
| 実行使用メモリ | 152,992 KB |
| 最終ジャッジ日時 | 2025-04-15 22:52:12 |
| 合計ジャッジ時間 | 5,534 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 4 RE * 31 |
ソースコード
import bisect
def main():
import sys
input = sys.stdin.read
data = input().split()
idx = 0
Q = int(data[idx])
idx += 1
active = []
sorted_values = []
delta = 0
for _ in range(Q):
t = int(data[idx])
x = int(data[idx + 1])
idx += 2
if t == 1:
stored = x - delta
active.append(stored)
bisect.insort(sorted_values, stored)
elif t == 2:
x -= 1 # convert to 0-based
stored = active[x]
pos = bisect.bisect_left(sorted_values, stored)
while pos < len(sorted_values) and sorted_values[pos] == stored:
if (x == 0 or (active[:x].count(stored) == active[:x+1].count(stored) - 1)):
sorted_values.pop(pos)
break
pos += 1
active.pop(x)
elif t == 3:
delta += x
N = len(sorted_values)
if N == 0:
print(0)
continue
low = 1
high = N
best = 0
while low <= high:
mid = (low + high) // 2
if mid > N:
high = mid - 1
continue
idx_mid = N - mid
if idx_mid >= 0 and sorted_values[idx_mid] + delta >= mid:
best = mid
low = mid + 1
else:
high = mid - 1
print(best)
if __name__ == "__main__":
main()
lam6er