算法第二週作業06

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;
                }
            }
        }
    }


發佈了40 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章