题目描述:
老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
题目类别: 排序
难度: 初级
运行时间限制: 无限制
内存限制: 无限制
阶段: 入职前练习
输入:
输入包含多组测试数据。
每组输入第一行是两个正整数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。
输出:
对于每一次询问操作,在一行里面输出最高成绩。
样例输入:
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
样例输出:
5
6
5
9
代码如下:
public class zui_GaoFen { public static void main(String[] args) { Scanner sc=new Scanner(System.in); //初始化数据 N:学生数量 M:操作数量 String firstLine=sc.nextLine(); String[] initalNums=firstLine.split(" "); int N=Integer.parseInt(initalNums[0]); int M=Integer.parseInt(initalNums[1]); //初始化成绩 String secondLine=sc.nextLine(); int []scores=new int[N]; scores=getScores(secondLine); //命令 int[] Max=new int[M]; int count=0; for (int i = 0; i < M; i++) { String q_or_u=sc.next(); if (q_or_u.equals("Q")) { int a=sc.nextInt(); int b=sc.nextInt(); Max[count]=getMax(scores,a-1,b-1); count++; } if (q_or_u.equals("U")) { int a=sc.nextInt(); int b=sc.nextInt(); scores[a-1]=b; } } for (int i = 0; i < count; i++) { System.out.println(Max[i]); } sc.close(); } public static int getMax(int[] score,int a,int b) { int temp=score[a]; for (int i = a; i <= b; i++) { if (score[i]>temp) { temp=score[i]; } } return temp; } public static int[] getScores(String secondLine) { String[] scores=secondLine.split(" "); int []res=new int[scores.length]; for (int i = 0; i < scores.length; i++) { res[i]=Integer.parseInt(scores[i]); } return res; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zzc8265020/article/details/46923719