#P6301. 集合

    ID: 5250 Type: RemoteJudge 2000ms 500MiB Tried: 0 Accepted: 0 Difficulty: 5 Uploaded By: Tags>树形数据结构2020O2优化

集合

题目描述

你需要在线维护一个自然数的排序集 SS 并支持以下操作:

  1. 给一个数 xx,若 xx 不在集合 SS 中则将 xx 添加到集合 SS 中;
  2. 给一个数 xx,若 xx 已在集合 SS 中则将 xx 从集合 SS 中删除。

为了证明你维护了 SS,你需要在操作过程中回答以下询问:

  1. 求集合 SS 中最小元素的值,若 S=S=\varnothing 则返回 -1
  2. 求集合 SS 中最大元素的值,若 S=S=\varnothing 则返回 -1
  3. 求集合 SS 中元素的数量;
  4. 给一个数 xx,判断 xx 是否在集合内,若在则返回 1 ,若不在则返回 0
  5. 给一个数 xx,求集合 T=S[0,x)T=S\cap[0^-,x) 中最大元素的值,若 T=T=\varnothing 则返回 -1
  6. 给一个数 xx,求集合 T=S[x,n)T=S\cap[x,n) 中最小元素的值,若 T=T=\varnothing 则返回 -1

为了证明你在线地维护了 SS,对于所有在第一次询问后的操作 1,21,2 与询问 6,7,86,7,8,实际操作和询问的参数 xx 为输入中给出的操作和询问的参数 xx' 与上一次询问的返回结果 last\text{last} 之和。即 x=x+lastx=x'+\text{last}

保证 0x<n0\le x<n

初始时 S=S=\varnothing

输入格式

输入共 (m+1)(m+1) 行,其中 mm 的意义见下。

第一行两个正整数 n,mn,m,其中 nn 表示操作与询问的参数 xx 的上界,mm 表示操作与询问个数的总和。
接下来 mm 行,每行一个或两个自然数,表示一次操作或者询问。保证每一行为如下八种形式之一:

  1. 1 x',表示执行操作 11
  2. 2 x',表示执行操作 22
  3. 3,表示回答询问 33
  4. 4,表示回答询问 44
  5. 5,表示回答询问 55
  6. 6 x',表示回答询问 66
  7. 7 x',表示回答询问 77
  8. 8 x',表示回答询问 88

输出格式

为避免输出过多,你只需要输出一行一个整数,表示所有询问的返回结果之和。

4 13
1 0
1 1
1 3
1 3
3
7 0
7 2
8 3
4
2 0
4
6 2
5

8

提示

样例解释

实际上执行的操作与回答的询问如下:

1 0
1 1
1 3
1 3
3		->  0
7 0		-> -1
7 1		->  0
8 3		->  3
4		->  3
2 3
4		->  1
6 3		->  0
5		->  2

因此输出为 0+(1)+0+3+3+1+0+2=80+(-1)+0+3+3+1+0+2=8

数据范围

测试点编号 n=n= m=m= 分值
11 2202^{20} 2142^{14} 55
22 2252^{25} 2172^{17}
33 2302^{30} 2202^{20} 1010
44 2222^{22} 1515
55
66 2232^{23} 2525
77

对于 100%100\% 的数据,满足 $2^{20}\le n\le2^{30},2^{14}\le m\le 2^{23},0\le x<n$。

提示

本题输入量较大,建议使用较快的读入方式。

00^- 表示略小于 00 的一个值,[0,x)[0^-,x) 可以保证第 77 个操作的 TT 恒有意义。