結果
| 問題 |
No.618 labo-index
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:58:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 587 ms / 6,000 ms |
| コード長 | 1,555 bytes |
| コンパイル時間 | 288 ms |
| コンパイル使用メモリ | 81,660 KB |
| 実行使用メモリ | 101,536 KB |
| 最終ジャッジ日時 | 2025-04-15 23:00:24 |
| 合計ジャッジ時間 | 7,157 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 35 |
ソースコード
import bisect
def main():
import sys
input = sys.stdin.read().split()
ptr = 0
Q = int(input[ptr])
ptr += 1
inserted = []
active = []
sorted_values = []
delta = 0
for _ in range(Q):
t = int(input[ptr])
x = int(input[ptr+1])
ptr += 2
if t == 1:
stored = x - delta
inserted.append(stored)
active.append(True)
bisect.insort(sorted_values, stored)
elif t == 2:
index = x - 1
stored = inserted[index]
if active[index]:
active[index] = False
pos = bisect.bisect_left(sorted_values, stored)
if pos < len(sorted_values) and sorted_values[pos] == stored:
sorted_values.pop(pos)
elif t == 3:
delta += x
n = len(sorted_values)
left = 0
right = n
max_l = 0
while left <= right:
mid = (left + right) // 2
if mid == 0:
max_l = 0
left = mid + 1
continue
if mid > n:
right = mid - 1
continue
if mid > len(sorted_values):
right = mid - 1
continue
s_mid = sorted_values[-mid]
if s_mid + delta >= mid:
max_l = mid
left = mid + 1
else:
right = mid - 1
print(max_l)
if __name__ == "__main__":
main()
lam6er