Description
題目描述
老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.
輸入描述:
輸入包括多組測試數據。 每組輸入第一行是兩個正整數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 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
輸出例子:
5 6 5 9
Code
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 用於循環測試,沒有的話可能會顯示無輸出
while(sc.hasNext()){
// 讀取學生數量
int number = sc.nextInt();
// 讀取操作數量
int counter = sc.nextInt();
int[] students = new int[number];
// 初始化學生分數
for(int i=0; i<number; i++){
students[i] = sc.nextInt();
}
while(counter-- > 0){
// 讀取操作
String opt = sc.next();
// 讀取第一個數值
int fir = sc.nextInt();
// 讀取第二個數值
int sec = sc.nextInt();
int tmp = fir;
if(opt.equals("Q")){
// 查詢最大數
// 如果左邊索引>右邊索引則對換
if(fir > sec){
fir = sec;
sec = tmp;
}
int max = students[fir - 1];
for(int i = fir; i < sec; i++){
if(max < students[i]){
// 選擇最大數
max = students[i];
}
}
// 打印結果
System.out.println(max);
} else if(opt.equals("U")){
// 更新數值
students[fir-1] = sec;
}
}
}
}