生成序列
题目描述
高桥君有一个长度为 N 的序列 A=(A1,A2,…,AN)。A 是 (1,2,…,N) 的一个排列。
他将执行 Q 次操作来生成 1+Q 个序列。他把 A 记为编号为 0 的序列,然后开始一系列操作。第 i 次操作(1≤i≤Q)由整数三元组 (ti,si,xi) 表示,对应以下操作(也可参考样例输入/输出中的说明)。
当 ti=1 时,他从编号为 si(0≤si<i)的序列中删除第 xi 个元素之后的元素,并用被删除的元素按原顺序创建一个新的编号为 i 的序列。
当 ti=2 时,他从编号为 si(0≤si<i)的序列中删除大于 xi 的元素,并用被删除的元素按原顺序创建一个新的编号为 i 的序列。
对于长度为 L 的序列 X,X 的每个元素都属于「第 0 个元素之后的元素」。另外,对于任意满足 L≤l 的 l,X 中没有元素属于「第 l 个元素之后的元素」。
对于 i=1,2,…,Q,求出第 i 次操作结束后编号为 i 的序列的长度。
输入格式
输入按以下格式从标准输入给出:
N
A1 A2 … AN
Q
t1 s1 x1
t2 s2 x2
⋮
tQ sQ xQ
输出格式
输出 Q 行。第 i 行(1≤i≤Q)应包含第 i 次操作结束后编号为 i 的序列的长度。
样例
10
1 8 7 4 5 6 3 2 9 10
5
2 0 4
1 1 2
2 0 2
2 2 5
1 0 1
6
4
2
3
1
初始时,高桥君有一个长度为 10 的序列 A=(1,8,7,4,5,6,3,2,9,10)。他把 A=(1,8,7,4,5,6,3,2,9,10) 记为编号为 0 的序列,然后开始一系列操作。
在第一次操作中,他从编号为 0 的序列中删除大于 4 的元素,即 8,7,5,6,9,10,并用这些元素创建一个新的编号为 1 的序列。这次操作之后,编号为 0 和 1 的序列分别是 (1,4,3,2) 和 (8,7,5,6,9,10)。
在第二次操作中,他从编号为 1 的序列中删除第 2 个元素之后的元素,即 5,6,9,10,并用这些元素创建一个新的编号为 2 的序列。这次操作之后,编号为 0、1 和 2 的序列分别是 (1,4,3,2)、(8,7) 和 (5,6,9,10)。
对于第三次及以后的操作,第 i 次操作结束后编号为 0,1,2,…,i 的序列如下:
(1,2),(8,7),(5,6,9,10),(4,3)
(1,2),(8,7),(5),(4,3),(6,9,10)
(1),(8,7),(5),(4,3),(6,9,10),(2)
对于 i=1,2,…,5,第 i 次操作结束后编号为 i 的序列的长度为 6,4,2,3,1。请将这些数值分别输出在单独的一行中。
8
6 7 8 4 5 1 3 2
5
2 0 0
1 1 0
2 2 0
1 3 8
2 2 3
8
8
8
0
0
操作可能会产生空序列。
30
20 6 13 11 29 30 9 10 16 5 8 25 1 19 12 18 7 2 4 27 3 22 23 24 28 21 14 26 15 17
10
1 0 22
1 0 21
2 0 15
1 0 9
1 3 6
2 3 18
1 6 2
1 0 1
2 5 20
2 7 26
8
1
8
4
2
5
3
8
1
1
数据范围
- 1≤N≤2×105
- 1≤Ai≤N (1≤i≤N)
- Ai=Aj (1≤i<j≤N)
- 1≤Q≤2×105
- ti=1,2 (1≤i≤Q)
- 0≤si<i (1≤i≤Q)
- 0≤xi≤N (1≤i≤Q)
- 输入中的所有数值均为整数。