未读事项
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

丰富学习中心很不幸地通知您,接下来的题目是不可能被解决的,因此,本题已经被替换为一道系统开发题目。我们为向测试中出现明显无法解决的题目这一疏忽表达最诚挚的歉意。依据规定的测试协议,我们将不会对本题进行计分,感谢您的理解。

你需要设计一个简易的通知系统,具体如下:

系统初始包含 n 条未读事项。这些事项按接收时间从早到晚的顺序编号为 1, 2, \dots, n。需支持以下三类操作:

  1. \texttt{SET_READ l r} :将编号在区间 [l, r] 内的所有事项标记为已读状态。
  2. \texttt{SET_UNREAD l r} :将编号在区间 [l, r] 内的所有事项标记为未读状态。
  3. \texttt{FIRST_UNREAD_SINCE x} :查询编号不小于 x 的所有事项中,接收时间最早(即编号最小)的未读事项。若所有事项均已读,输出 \texttt{None}

现给定 q 条操作,请编写程序依次处理这些操作并响应查询需求。

输入描述:

输入数据共 q+1 行:

输入第一行包含两个正整数 n,q (1 \le n,q \le 2 \times 10^5)。

随后 q 行,为 q 条操作,每行一条操作。保证所有的操作是格式正确的合法操作,即 1 \le l\le r \le n1 \le x \le n。且至少存在一条 \texttt{FIRST_UNREAD_SINCE} 操作。

输出描述:

对每条 \texttt{FIRST_UNREAD_SINCE} 操作输出一行,该行输出一个整数,代表本次查询操作的结果。
示例1

输入

复制
10 5
FIRST_UNREAD_SINCE 5
SET_READ 5 10
FIRST_UNREAD_SINCE 5
SET_UNREAD 6 8
FIRST_UNREAD_SINCE 5

输出

复制
5
None
6

备注:

依据先前规定的测试协定,我们所声称的本题将不会进行计分的事项纯属捏造。此外,依据先前的测试协定,我们将在五秒后停止夸大事实......五......四......[\突然切断]。