//老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
//输入描述:
//
//输入包括多组测试数据。
//每组输入第一行是两个正整数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
好久没刷题了,程序员之路漫漫,今天华为机试,求好运。
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int M = in.nextInt();//学生的数目
int N = in.nextInt();//操作的数目
int[] arr = new int[M];
for(int i=0;i<M;i++){
arr[i] = in.nextInt();
}
ArrayList<Integer> array = new ArrayList();
for(int j=0;j<N;j++){
String ope = in.next();
int a = in.nextInt();
int b = in.nextInt();
int res =getProcess(arr,a,b,ope);
if(res!=-1){
array.add(res);
}
}
for(int i= 0;i<array.size();i++){
System.out.println(array.get(i));
}
}
}
public static int getProcess(int[] a, int i, int j, String s){
if(s.equals("Q")){
if(i>j){
int temp=i;
i=j;
j=temp;
}
int max=a[i-1];
for(int k=i-1;k<=j-1;k++){
if(a[k]>=max){
max = a[k];
}
}
return max;
}else{
a[i-1]=j;
return -1;
}
}
}
遇到的问题:主要是在判断A和B大小的问题上。当求最大值操作时,需要关注下左右边的大小。如果A>B时,需要将A,B互换。但是更新操作不需要关注A,B的大小。