#P6645. [CCO2020] Interval Collection

[CCO2020] Interval Collection

题目背景

本题题面来自 LOJ

题目描述

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],选择 [1,5][1,5] 最优,答案为 44

加入 [2,7][2,7],选择 [1,5],[2,7][1,5],[2,7] 最优,答案为 71=67-1=6

加入 [4,6][4,6],选择 [1,5],[4,6][1,5],[4,6] 最优,答案为 61=56-1=5

加入 [6,8][6,8],选择 [4,6],[6,8][4,6],[6,8] 最优,答案为 84=48-4=4

删除 [4,6][4,6],选择 [1,5],[6,8][1,5],[6,8] 最优,答案为 81=78-1=7

子任务

本题使用捆绑测试

  • Subtask 1(1212 分):Q500Q\le 500
  • Subtask 2(3232 分):Q1.2×104Q\le 1.2\times 10^4
  • Subtask 3(2828 分):Q5×104Q\le 5\times 10^4
  • Subtask 4(1616 分):对于任两个区间 (l1,r1)(l_1,r_1)(l2,r2)(l_2,r_2),保证 r1<l2r_1<l_2 或者 r2<l1r_2<l_1
  • Subtask 5(1212 分):无特殊限制。

对于 100%100\% 的数据,保证 1Q5×1051\le Q\le 5\times 10^51l,r1061\le l,r\le 10^6

说明

本题译自 Canadian Computing Olympiad 2020 Day 2 T2 Interval Collection。

本题数据有所删减。