给定序列(
a
1
,
a
2
,
a
3
.
.
.
a
n
a_1,a_2,a_3...a_n
a1,a2,a3...an)=(1,2,3…n),即
a
i
a_i
ai=i
现要求你对这个序列进行m次操作,每次可能是
a
1
,
a
2
.
.
.
,
a
q
a_1,a_2...,a_q
a1,a2...,aq降序排列,或者将
a
q
,
a
q
+
1...
,
a
n
a_q,a_q+1...,a_n
aq,aq+1...,an升序排列,请求出完成后的序列。
输入描述
输入的第一行包含两个整数n, m,分别表示序列的长度和操作次数.
接下来的m行描述对序列的操作,其中第 i 行包含两个整数 p i , q i p_i,q_i pi,qi表示操作类型和参数,当 p i p_i pi=0时,将 a 1 , a 2 . . . , a q a_1,a_2...,a_q a1,a2...,aq降序排列,当 p i p_i pi=1时,将 a q + 1 , a q + 2 . . . . a n a_{q+1},a_{q+2}....a_n aq+1,aq+2....an升序排列
输出描述
输出一行,包含n个数,相邻的整数之间使用一个空格分隔,表示操作完成后的序列。
示例
输入
3 3
0 3
1 2
0 2
输出
3 1 2
备注
1≤n≤ 1 0 6 10^6 106
1≤m≤ 1 0 2 10^2 102
注意点:sort(
a
1
,
a
n
a_1,a_n
a1,an)是对下标1~n-1的数组进行从小到大排序,并不是到从1到n
sort(
a
1
,
a
n
,
c
m
p
a_1,a_n,cmp
a1,an,cmp)使用时要先对cmp进行定义
bool cmp(int a,int b){return a>b}
才能从大到小排列
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int a[N];
bool cmp(int a, int b) {return a > b; }
int main()
{
int n,m;
int x,y;
cin>>n>>m;
for(int i=1;i<=n;i++) a[i]=i;
while(m--){
cin>>x>>y;
if(x==0) sort(a+1,a+1+y,cmp);
else if(x==1) sort(a+y,a+1+n);
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
puts("");
return 0;
}