题目:
先上代码!!
n = int(input()) template = list(map(int, input().split())) m = int(input()) for _ in range(m): l, r, k = map(int, input().split()) tem = template[l-1:r] for i in range(k-1): tem.pop(tem.index(max(tem))) else: print(max(tem))
代码解释(超级详细):
n是序列长度,因为input()输入后是字符型,用int()转为整型。
template是给定的序列,1、先通过input().split()将输入的值转为列表,此时列表中的值还是字符型。2、通过map()迭代器,将列表值都转为整型。3、list()将返回迭代器转为列表。
m是询问次数。
for _ in range(m),循环m次。
l, r, k = map(int, input().split()),1、先通过input().split()将输入的值转为列表,此时列表中的值还是字符型。2、通过map()迭代器,将列表值都转为整型。3、再分别赋予给l,r,k。
tem = template[l-1:r],对template列表进行切片,因为序列元素从1开始标号,而切片是左闭右开,所以说[l-1:r]。
for--else:会在for中的语句块正常执行完后,执行else中的语句块。
for i in range(k-1):因为需要找第k大的值,所以说将比k大的值进行弹出。弹出k-1次,然后执行else中的语块——打印tem中的最大值。就是第k大的值。
tem.pop(tem.index(max(tem))),1、max(tem),找出tem中的最大值。2、tem.index(),根据所给值来找出列表中所给值的索引。3、pop(),根据所给索引进行弹出。
有点啰嗦,应该有最好的写法。