题目描述  老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.  输入描述:  输入包括多组测试数据。  每组输入第一行是两个正整数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.Scanner;
public class Main {
    
static int M;
    
static int N;
    
static int[] grades;
    
public static void Update(
int index, 
int grade){
        grades[index] = grade; 
    }
    
public static int Query_Max(
int start , 
int end){
        
int max;
        
if ( start > end){
            start += end;
            end = start - end;
            start -= end;
        }
        max = grades[start];
        
for ( 
int i = start+
1 ; i <= end ; i++){
            
if ( max < grades[i]){
                max = grades[i];
            }
        }
        
return max;
    }
    
public static void main(String[] args) {
        
        Scanner 
in = 
new Scanner(System.
in);
        
while(
in.hasNextInt()){
            M = 
in.nextInt();
            N = 
in.nextInt();
            grades = 
new int[M];
            
for ( 
int i = 
0 ; i < grades.length; i++){
                grades[i] = 
in.nextInt();
            }
            
for ( 
int i = 
0 ; i < N ; i++){
                String str = 
in.next();
                
int A = 
in.nextInt();
                
int B = 
in.nextInt();
                
if ( 
"Q".equals(str)){
                    
int max = Query_Max(A-
1, B-
1);
                    System.
out.println(max);
                }
else if (
"U".equals(str)){
                    Update(A-
1,B);
                }
            }
        }
        
in.close();
    }
}
                
                
                
        
    
                    转载请注明原文地址: https://ju.6miu.com/read-3592.html