結果
問題 |
No.618 labo-index
|
ユーザー |
![]() |
提出日時 | 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()