题目:蒜头君很无聊,现在有 NN 个数,其中第 i(1 \leq i \leq N)i(1≤i≤N) 个数是 A_iAi。
现在他先将 A_{l_1}, A_{l_1+1}...A_{r_1}Al1,Al1+1...Ar1 从小到大排序。
再将 A_{l_2}, A_{l_2+1}...A_{r_2}Al2,Al2+1...Ar2 从大到小排序。
请输出 AA 排序后的最终结果。
输入格式
第一行五个整数 N, l_1, r_1, l_2, r_2(l_1 < r_1, l_2 < r_2)N,l1,r1,l2,r2(l1<r1,l2<r2),均不超过 100000100000。
第二行 NN 个不超过 int 范围的整数,表示 AA 数组。
输出格式
一行 NN 个用空格分隔的整数,表示 AA 排序以后的结果。
我用的是区间划分思想,最关键的问题就是如何划分区间。
- python的列表区间是左闭右开的
- python下标区间和位置区间对应的是减一的关系
s = [int(i) for i in input().split(' ')]
x=[]
N = s[0]
l_1,r_1,l_2,r_2=s[1],s[2],s[3],s[4]
num = [int(n) for n in input().split(' ')]
l = num[l_1-1:r_1]
r = num[l_2-1:r_2]
l.sort()
r.reverse()
for i in range(N):
if i<l_1-1:
print(num[i],end=' ')
elif l_1-1<=i and i<r_1:
print(l[i-l_1+1],end=' ')
elif r_1<=i and i<l_2-1:
print(num[i],end=' ')
elif l_2-1<=i and i<r_2:
print(r[i-l_2+1],end=' ')
else:
print(num[i],end=' ')
写这个文章主要原因是遇到这题的时候找不到方便我这种小白理解的答案,就自己写了= =
看了男票做的,终于知道基础不牢地动山摇是啥意思了0.0这个题完全可以用内置函数部分排序,代码更简单了!
s = [int(i) for i in input().strip().split()]
N,l_1,r_1,l_2,r_2 = s[0],s[1],s[2],s[3],s[4]
AA = [int(i) for i in input().strip().split()]
AA[l_1-1:r_1]= sorted(AA[l_1-1:r_1])#sorted函数默认升序,要注意list区间从0开始,并且是左闭右开的
AA[l_2-1:r_2]=sorted(AA[l_2-1:r_2],reverse=True)#这个区间是降序,reverse=True
for i in range(len(AA)):
if i < len(AA)-1:
print(AA[i],end=' ')
else:
print(AA[i])
运行结果: