[编程题]最高分是多少 题解实践

1、 [编程题]最高分是多少

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.


输入描述:

输入包括多组测试数据。

每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。

学生ID编号从1编到N。

第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩

接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少

当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。


输出描述:

对于每一次询问操作,在一行里面输出最高成绩.


输入例子1:

5 7

1 2 3 4 5

Q 1 5

U 3 6

Q 3 4

Q 4 5

U 4 5

U 2 9

Q 1 5


输出例子1:

5

6

5

9


[审题攻略]

此题中有几个隐含的点需要特别注意:

1、 不止输入一对N和M,代码需要可以循坏处理输入能力,可以使用while True一直循环接收输入;

2、 询问A到B学生中成绩最高值,这个地方没有说明A和B哪个大,需要自行判断;

3、 题目中没有说异常情况怎么返回,但是作为程序员,必须知道任何代码都需要健壮性,能捕捉异常及处理,所以必须加上try…except(如果是C++或JAVA则是try…catch)


[答题攻略]

1、 千万不要直接在牛客网上编写代码,因为错误的代码不好发觉,机考之前下载对应编程语言的IDE,有错误编辑器会提示你;

2、 当使用数组下标表示对象时,千万要注意,数组下标是从0开始的;

3、 所有的题目均会涉及输入输出,所以对于C++、JAVA、python…一定要熟悉常用的接收输入语法;


[提交攻略]

1、 一定要用对应语言的高版本提交;


[答案]

while True:

try:

N,M = map(int, input().split())

score_list = list(map(int, input().split()))

for i in range(M):

command = input().split()

if command[0] == 'Q':

start, end = sorted([int(command[1]), int(command[2])])

score_max = max(score_list[start-1:end])

print(score_max)

else:

score_list[int(command[1])-1] = int(command[2])

except:

break

#题解#
全部评论
线段树模板题,暴力肯定复杂度过不了
2 回复
分享
发布于 2020-02-21 18:40

相关推荐

点赞 3 评论
分享
牛客网
牛客企业服务