[编程题]最高分是多少 题解实践
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
#题解#