Home => ProblemSet => 3.2-77:【模板】线段树分裂
Problem2295--3.2-77:【模板】线段树分裂

2295: 3.2-77:【模板】线段树分裂

Time Limit: 1 Sec  Memory Limit: 128 MB  Submit: 0  Solved: 0
[ Submit ] [ Status ] [ Creator: ][ 参考程序 ]

Description

给出一个可重集 a(编号为 1),它支持以下操作:
0 p x y:将可重集 p 中大于等于 x 且小于等于 y 的值移动到一个新的可重集中(新可重集编号为从 2 开始的正整数,是上一次产生的新可重集的编号+1)。
1 p t:将可重集 t 中的数放入可重集 p,且清空可重集 t(数据保证在此后的操作中不会出现可重集 t)。
2 p x q:在 p 这个可重集中加入 x 个数字 q。
3 p x y:查询可重集 p 中大于等于 x 且小于等于 y 的值的个数。
4 p k:查询在 p 这个可重集中第 k 小的数,不存在时输出 -1。

Input

第一行两个整数 n,m,表示可重集中的数在 1∼n 的范围内,有 m 个操作。
接下来一行 n 个整数,表示 1∼n 这些数在 a 中出现的次数 (ai≤m)。
接下来的 m 行每行若干个整数,第一个数为操作的编号 opt(0≤opt≤4),以题目描述为准。

Output

依次输出每个查询操作的答案。

Sample Input Copy

5 12
0 0 0 0 0
2 1 1 1
2 1 1 2
2 1 1 3
3 1 1 3
4 1 2
2 1 1 4
2 1 1 5
0 1 2 4
2 2 1 4
3 2 2 4
1 1 2
4 1 3

Sample Output Copy

3
2
4
3

HINT

对于 30% 的数据,1≤n≤103,1≤m≤103
对于 100% 的数据,1≤n,k≤2×105,1≤x,y,q≤m≤2×105。保证数据合法。

Source/Category