Python:双向排序
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
题目描述
给定序列 (a1,a2,⋅⋅⋅,an)=(1,2,⋅⋅⋅,n)即 ai=i。
小张将对这个序列进行 m 次操作每次可能是将 a1,a2,⋯,aqi 降序排列或者将 aqi,aqi+1,⋯,an 升序排列。
请求出操作完成后的序列。
输入描述
输入的第一行包含两个整数 n,m分别表示序列的长度和操作次数。
接下来 m 行描述对序列的操作其中第 i 行包含两个整数 pi,qi 表示操作类型和参数。当 pi=0 时表示将 1,2,⋅⋅⋅,a1,a2,⋅⋅⋅,aqi 降序排列当 pi=1 时表示将 aqi,aqi+1,⋯,an 升序排列。
输出描述
输出一行包含 n 个整数相邻的整数之间使用一个空格分隔表示操作完成后的序列。
输入输出样例
示例
输入
3 3
0 3
1 2
0 2
输出
3 1 2
样例说明
原数列为 (1,2,3)。
第 1 步后为 (3,2,1)。
第 2 步后为 (3,1,2)。
第 3 步后为 (3,1,2)。与第 2 步操作后相同因为前两个数已经是降序了。
评测用例规模与约定
对于 30% 的评测用例n,m≤1000
对于 60% 的评测用例n,m≤5000
对于所有评测用例1≤n,m≤1000000≤pi≤11≤qi≤n。
参考代码
n,m=map(int,input().split())
a=[i for i in range(1,n+1)] #生成序列
for i in range(m):
p,q=map(int,input().split())
if p==0:
c=a[:q] #拷贝出来
c.sort(reverse=True) #排序
a[:q]=c #拷贝回去
else:
b=a[q-1:n]
b.sort()
a[q-1:n]=b
for i in a:
print(i,end=' ')
上述代码只能通过60%的样例测试