P4340【SCOI2014】方伯伯的Oj
问题描述
输入格式
输入的第1行包含2个用空格分隔的整数n和m,表示初始用户数和操作数。
此后有m行,每行是一个询问,询问格式如上所示。
输出格式
输出包含m行。每行包含一个整数,其中第i行的整数表示第i个操作的输出。
样例输入
10 10
1 2 11
3 13
2 5
3 7
2 8
2 10
2 11
3 14
2 18
4 9
样例输出
2
2
2
4
3
5
5
7
8
11
提示
对于 100% 的数据,1 ≤ n ≤ 10^8,1 ≤ m ≤ 10^5
输入保证对于所有的操作 1,2,3,x 必然已经出现在队列中,同时对于所有操作 1,1 ≤ y ≤ 2 × 10^8,并且
y 没有出现在队列中。
对于所有操作 4,保证 1 ≤ k ≤ n。
此题强制在线,观察发现$n$很大,那么显然此题应该根据$m$入手,考虑将Splay中的点维护一个区间,然后查询到了再拆开成3个点。
需要维护两个值,编号和排名,按照排名建立Splay,用map记录编号区间为$[a,b]$的点,还需要记录当前已经被拆过的点即查找过的位置,这样就可以通过编号找到在Splay中对应的位置,然后还需要开一个map记录表示一个点的点。
然后每种操作找到对应的Splay的位置,拆点后直接处理即可。
代码:
1 |
|