算法题-[编程题]最高分是多少
[编程题]最高分是多少
输入描述:
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时候, 表示这是一条询问操作,假设A<B,他询问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
输入例子2:
3 2
1 2 3
U 2 8
Q 3 1
输出例子2:
8
解题代码
package cn.hwod.demo1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class HighScor2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
do {
int n = scan.nextInt();
int m = scan.nextInt();
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
list.add(scan.nextInt());
}
for (int i = 0; i < m; i++) {
String c = scan.next();
int a = scan.nextInt();
int b = scan.nextInt();
if (c.equals("Q")) {
if (a>b) {
int temp = a;
a=b;
b=temp;
}
List<Integer> sublist = new ArrayList<Integer>();
for (int j = a-1; j < b; j++) {
sublist.add(list.get(j));
}
Collections.sort(sublist);
System.out.println(sublist.get(sublist.size()-1));
} else if(c.equals("U")){
list.set(a-1,b);
}
else;
}
} while (scan.hasNext());
scan.close();
}
}
关注的类及方法
Scanner 类下的方法
do while:主要用途
List list = new ArrayList();创建 list列表 展示数组?
Collections.sort(sublist); Collections 集合类的方法