#P51324. 「CCO 2020」区间收藏

「CCO 2020」区间收藏

题目描述

译自 CCO 2020 Day2 T2「Interval Collection,翻译者:PinkRabbit


Altina 正进行区间收藏。一对满足 l<rl < r 的正整数 [l,r][l, r] 为一个区间,我们称这样的区间的长度为 rlr - l

我们称区间 [l,r][l, r] 包含区间 [x,y][x, y],当且仅当 lxl \le x 并且 yry \le r。特别地,每个区间都包含自身。

定义一个非空集合 SS最大公共子区间为被 SS 中每个区间都包含的区间中最长的那个,如果没有这样的区间则未定义。

定义一个非空集合 SS最小公共超区间为包含 SS 中每个区间的区间中最短的那个,注意这样的区间总是存在。

初始时,Altina 的收藏中没有任何区间。接下来会发生 QQ 个事件,对 Altina 的收藏产生改变。

  1. Altina 往她的收藏中添加一个区间 [l,r][l, r],如果此时收藏中已有 [l,r][l, r],应该被算作不同的两个区间。
  2. Altina 移除一个在收藏中已经存在的区间 [l,r][l, r],如有多个只以移除恰好一个。

在每个事件发生后,Altina 选择一个她的收藏中的非空子集 SS,并且满足如下条件:

  • 在所有的选取方案中,她会选择最大公共子区间未定义的。如果不存在这样的方案,则她会选择最大公共子区间的长度最小的。
  • 在所有的满足上述条件的集合 SS 中,她会选择最小公共超区间的长度最小的。

请你在每一个事件发生后,输出 Altina 会选择的集合 SS 的最小公共超区间的长度。

输入格式

第一行一个正整数 QQ,表示将会发生的事件的个数。
接下来 QQ 行,每行描述一个事件,格式如下:

  • A  l  r\mathtt{A}\;l\;r:添加一个区间 [l,r][l, r] 到 Altina 的收藏中。
  • R  l  r\mathtt{R}\;l\;r:从 Altina 的收藏中移除一个区间 [l,r][l, r],保证这个区间在她的收藏中存在,且移除后她的收藏非空。

输出格式

输出 QQ 行,每行一个正整数表示每个事件发生后 Altina 会选择的集合 SS 的最小公共超区间的长度。

样例

5
A 1 5
A 2 7
A 4 6
A 6 8
R 4 6
4
6
5
4
7

[1,5][1, 5] 被加入后,只有一个区间。所以 S={[1,5]}S = \{[1, 5]\} 是唯一的选择,最小公共超区间为 [1,5][1, 5]

[2,7][2, 7] 被加入后,S={[1,5],[2,7]}S = \{[1, 5], [2, 7]\},最大公共子区间为 [2,5][2, 5],最小公共超区间为 [1,7][1, 7]

[4,6][4, 6] 被加入后,S={[1,5],[4,6]}S = \{[1, 5], [4, 6]\},最大公共子区间为 [4,5][4, 5],最小公共超区间为 [1,6][1, 6]

[6,8][6, 8] 被加入后,S={[4,6],[6,8]}S = \{[4, 6], [6, 8]\},最大公共子区间不存在,最小公共超区间为 [4,8][4, 8]。注意到 S={[1,5],[6,8]}S = \{[1, 5], [6, 8]\} 也不存在最大公共子区间,但是它的最小公共超区间为 [1,8][1, 8],长度比 [4,8][4, 8] 要更长。

[4,6][4, 6] 被移除后,S={[1,5],[6,8]}S = \{[1, 5], [6, 8]\},最大公共子区间不存在,最小公共超区间为 [1,8][1, 8]

数据范围与提示

对于所有数据,保证 1Q5×1051 \le Q \le 5 \times {10}^51l<r1061 \le l < r \le {10}^6

子任务编号 分值 特殊限制
11 1212 Q500Q \le 500
22 3232 Q12000Q \le 12000
33 2828 Q50000Q \le 50000
44 1616 在任何时刻,Altina 的收藏中的任意两个区间 [l1,r1][l_1, r_1][l2,r2][l_2, r_2] 都满足:要么 r1<l2r_1 < l_2 要么 r2<l1r_2 < l_1
55 1212 无特殊限制