[编程题] 最高分是多少
时间限制: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 }
时间: 2024-11-03 21:35:50