试题 历届真题 双向排序(python)


问题描述

方案一(60分)

问题分析

输入n、m,n表示序列长度,m表示操作的次数
接下来m行,每行第一个数p表示要进行的操作,第二个数q表示进行操作的数。
需要注意的是,当p=0时,对前1:q进行降序;p=1时,对q:n进行升序排序。
总体上就是截取一段数进行排序。

提交代码

n,m = input().split()
n = int(n)
m = int(m)

# 初始化数组

a = [i+1 for i in range(n)]

# 进行m次操作
for i in range(m):
    p,q= input().split()
    p = int(p)
    q = int(q)
    if p==0:
        tmp = a[0:q]
        tmp.sort(reverse=True)
        a[0:q] = tmp
    else:
        tmp =a[q-1:n]
        tmp.sort()
        a[q-1:n] = tmp
    # print(a)

for i in a:
    print(i,end=" ")

提交结果


只有60分,四个点超时

结果分析

可能有十万次操作,每一次操作加起来会超过时间限制,为此我们需要进行优化,减少进行排序的次数。

方案二

问题再分析