一位雄心勃勃的大学生选修了几乎所有可能的课程。不幸的是,这些课程要求强制出勤。他决定每天多次前往举办讲座的大学校园。他会在那一刻参加所有正在进行的讲座,签到,然后由于其他事务立即离开校园。他当天晚些时候会回来,重复这个过程以在其他讲座上签到,以此类推,直到他的名字出现在所有讲座的签到表上。
如果这还不够麻烦,学生还面临另一个障碍:讲座的时间表一直在变。一些讲座被添加,一些被取消。学生必须不断调整他的校园访问时间表,以在所有讲座上签到。
编写一个程序,从一个空的讲座时间表开始,读取一系列修改,这些修改要么是添加一个讲座,要么是删除一个讲座。对于每次修改,输出学生为了在当前时间表上的所有讲座中签到所需的最少访问次数。
输入格式
第一行包含修改次数 $N$,接下来的 $N$ 行描述了这些修改。添加讲座由两个空格分隔的整数 $A_i$ 和 $B_i$ 描述,表示一个从 $A_i$ 到 $B_i$(包含两个端点)进行的讲座。讲座按添加顺序从 1 开始编号。负数 $X_i$ 表示删除编号为 $-X_i$ 的讲座。
数据范围
- $1 \le N \le 300\,000$
- $0 \le A_i \le B_i \le 10^9$
- 每个用于删除的讲座编号 $X_i$ 都是有效的——它在当时的时间表中确实存在。
- 注意内存限制。
输出格式
对于每次修改,输出一行,包含当前讲座时间表所需的最少访问次数。
样例
输入 1
12 2 2 17 26 -2 12 21 0 0 19 21 16 22 14 20 15 19 13 14 -4 13 17
输出 1
1 2 1 2 3 3 3 3 3 4 3 3
说明
第一个添加的讲座是 $[2, 2]$,编号为 1。下一个添加的讲座是 $[17, 26]$,编号为 2。随后它被立即删除,这由输入中的 $-2$ 表示。接下来添加的讲座是 $[12, 21]$,编号为 3,依此类推。