简单算法 n个学生的最高分。

来源:互联网 发布:unity3d 烘焙场景 编辑:程序博客网 时间:2024/05/17 02:21

链接:https://www.nowcoder.com/questionTerminal/3897c2bcc87943ed98d8e0b9e18c4666

来源:牛客网


题目描述

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 
输入描述:
输入包括多组测试数据。每组输入第一行是两个正整数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 71 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 4 5U 2 9Q 1 5

输出例子:
5659

public class Main {
    publicstatic void main(String[] args) {
        intM=0 ,N=0;
        inti;
        intA = 0,B =0;
        Scanner in =new Scanner(System.in);
        while(in.hasNext()){
                N = in.nextInt();
                M = in.nextInt();  
     
    //          System.out.println (N + " " + M);
                 
            int[] score =new int[N];
            for(i=0; in.hasNext() && i<N; i++){
                score[i] = in.nextInt();
    //          System.out.println (score[i] + " ");
            }
             
            String c =null;
             
            for(i=0; in.hasNext() && i< M; i++){
                c  = in.next();
                A = in.nextInt();
                B = in.nextInt();  
                process(c,A,B,score);
            }
        }
             
    }
 
    privatestatic void process(String c, int a, int b, int[] score) {
        intbegin,end;     
         
        if(c.equals("Q")){
            end = Math.max(a, b);
            begin = Math.min(a, b)-1;
            intmax = score[begin];
            for(inti=begin;i<end;i++){
                if(max<score[i]){
                    max = score[i];
                }
            }
            System.out.println(max);
        }elseif(c.equals("U")){
            score[a-1] = b;
        }
    }
}
0 0
原创粉丝点击