1. 程式人生 > >【華為2016上機試題C++】最高分是多少

【華為2016上機試題C++】最高分是多少

top logs 輸出 style quest 初始 要求 編程題 vector

[編程題] 最高分是多少

時間限制:1秒

空間限制:65536K

老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.
輸入描述:
輸入包括多組測試數據。
每組輸入第一行是兩個正整數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
 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 int getmax(vector<int> &gra,int x,int y)//選出x到y中的最大值
 6  {    
 7        int temp;
 8        if
(x>y)//考慮輸入前面的比後面大的情況 9 { 10 temp=x; 11 x=y; 12 y=temp; 13 14 } 15 int max; 16 max=gra[x]; 17 for(int i=x;i<=y;++i) 18 { 19 if(gra[i]>max) 20 max=gra[i];
21 22 } 23 24 return max; 25 26 } 27 28 int main() 29 { 30 int x,y; 31 char ch; 32 int temp,g_num,op_num; 33 vector<int> max; 34 35 cin>>g_num>>op_num; 36 vector<int> gra; 37 38 for(int i=0;i<g_num;i++) 39 { 40 cin>>temp; 41 gra.push_back(temp); 42 43 } 44 45 while(op_num--) 46 { 47 48 cin>>ch>>x>>y; 49 50 if(ch==Q) 51 { 52 if(x==y) 53 { 54 max.push_back(gra[x-1]); 55 56 } 57 max.push_back(getmax(gra,x-1,y-1)); 58 59 } 60 else if(ch==U) 61 { 62 gra[x-1]=y; 63 } 64 65 66 } 67 for(vector<int>::iterator it = max.begin(); it < max.end(); it++) 68 { 69 cout<<*it<<endl; 70 } 71 72 max.clear(); 73 74 return 0; 75 76 }

【華為2016上機試題C++】最高分是多少