题目描述
给定 (1,2,…,N) 的一个排列 P=(P1,P2,…,PN),以及两个长度为 M 的整数序列 L=(L1,…,LM) 和 R=(R1,…,RM)。
对这个排列 P,按 i=1,2,…,M 的顺序执行下面的操作:
- 在 PLi,PLi+1,…,PRi 之中,把值最小的那个元素与值最大的那个元素的位置互换。
请求出 M 次操作结束后 P 的各个元素。
输入格式
N M
P_1 P_2 ... P_N
L_1 R_1
L_2 R_2
...
L_M R_M
输出格式
在一行中输出 M 次操作结束后的 P1,P2,…,PN,相邻两数之间用一个空格隔开。
输入示例 1
5 3
3 1 4 2 5
1 3
1 5
1 4
输出示例 1
3 4 2 5 1
示例 1 说明
初始时 P=(3,1,4,2,5)。
- i=1:P1,P2,P3 中最小值在 P2、最大值在 P3,交换后 P=(3,4,1,2,5);
- i=2:P1∼P5 中最小值在 P3、最大值在 P5,交换后 P=(3,4,5,2,1);
- i=3:P1∼P4 中最小值在 P4、最大值在 P3,交换后 P=(3,4,2,5,1)。
注意第 3 次操作里最大值在左、最小值在右——交换与两者的先后位置无关。
输入示例 2
6 7
3 6 5 2 4 1
4 5
2 3
3 5
4 6
3 4
1 6
3 5
输出示例 2
3 5 4 6 2 1
示例 2 说明
M>N,同一个区间(如 [3,5])被操作了两次,但两次之间 P 已经变了,所以两次的结果并不相同。这说明每次操作都必须基于当时的 P 重新查询最值位置,不能预处理一次了事。
输入示例 3
2 1
2 1
1 2
输出示例 3
1 2
示例 3 说明
N=2 是允许的最小值,区间 [1,2] 里最小值在 P2、最大值在 P1,交换后变成 (1,2)。由于约束保证 Li<Ri,区间长度至少为 2,最小值和最大值一定是两个不同的位置,不存在「自己和自己交换」的情况。
约束条件
- 2≤N≤2×105
- 1≤M≤2×105
- P 是 (1,2,…,N) 的排列
- 1≤Li<Ri≤N
- 所有输入值均为整数