P6645 [CCO 2020] Interval Collection

题目背景

本题题面来自 [LOJ](https://loj.ac/p/3321)。

题目描述

Altina 正进行区间收藏。一对满足 $l < r$ 的正整数 $[l, r]$ 为一个区间,我们称这样的区间的长度为 $r - l$。 我们称区间 $[l, r]$ 包含区间 $[x, y]$,当且仅当 $l \le x$ 并且 $y \le r$。特别地,每个区间都包含自身。 定义一个非空集合 $S$ 的**最大公共子区间**为被 $S$ 中每个区间都包含的区间中最长的那个,如果没有这样的区间则未定义。 定义一个非空集合 $S$ 的**最小公共超区间**为包含 $S$ 中每个区间的区间中最短的那个,注意这样的区间总是存在。 初始时,Altina 的收藏中没有任何区间。接下来会发生 $Q$ 个事件,对 Altina 的收藏产生改变。 1. Altina 往她的收藏中添加一个区间 $[l, r]$,如果此时收藏中已有 $[l, r]$,应该被算作不同的两个区间。 2. Altina 移除一个在收藏中已经存在的区间 $[l, r]$,如有多个只以移除恰好一个。 在每个事件发生后,Altina 选择一个她的收藏中的非空子集 $S$,并且满足如下条件: - 在所有的选取方案中,她会选择最大公共子区间未定义的。如果不存在这样的方案,则她会选择最大公共子区间的长度最小的。 - 在所有的满足上述条件的集合 $S$ 中,她会选择最小公共超区间的长度最小的。 请你在每一个事件发生后,输出 Altina 会选择的集合 $S$ 的最小公共超区间的长度。

输入格式

第一行一个正整数 $Q$,表示将会发生的事件的个数。 接下来 $Q$ 行,每行描述一个事件,格式如下: - $\mathtt{A}\;l\;r$:添加一个区间 $[l, r]$ 到 Altina 的收藏中。 - $\mathtt{R}\;l\;r$:从 Altina 的收藏中移除一个区间 $[l, r]$,保证这个区间在她的收藏中存在,且移除后她的收藏非空。

输出格式

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

说明/提示

#### 样例解释 加入 $[1,5]$,选择 $[1,5]$ 最优,答案为 $4$。 加入 $[2,7]$,选择 $[1,5],[2,7]$ 最优,答案为 $7-1=6$。 加入 $[4,6]$,选择 $[1,5],[4,6]$ 最优,答案为 $6-1=5$。 加入 $[6,8]$,选择 $[4,6],[6,8]$ 最优,答案为 $8-4=4$。 删除 $[4,6]$,选择 $[1,5],[6,8]$ 最优,答案为 $8-1=7$。 #### 子任务 **本题使用捆绑测试** - Subtask 1($12$ 分):$Q\le 500$。 - Subtask 2($32$ 分):$Q\le 1.2\times 10^4$。 - Subtask 3($28$ 分):$Q\le 5\times 10^4$。 - Subtask 4($16$ 分):对于任两个区间 $(l_1,r_1)$ 和 $(l_2,r_2)$,保证 $r_1