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()