题目描述:
老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
题目类别: 排序
难度: 初级
运行时间限制: 无限制
内存限制: 无限制
阶段: 入职前练习
输入:
输入包含多组测试数据。
每组输入第一行是两个正整数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;
}
}