[编程题] 最高分是多少

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 

输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数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 // ConsoleApplication4.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "stdafx.h"
 6 
 7 #include <iostream>
 8 #include <vector>
 9 
10 using namespace std;
11 
12 int getmax(int *p, int A, int B)
13 {
14     if (A > B)
15     {
16         A = A^B;
17         B = A^B;
18         A = A^B;
19     }
20     int max=p[A];
21     for (int i = A; i <= B; ++i)
22     {
23         if (p[i] > max)
24         {
25             max = p[i];
26         }
27     }
28     return max;
29 }
30 int _tmain(int argc, _TCHAR* argv[])
31 {
32     int N, M;
33     char ch;
34     int A, B;
35     vector<int> max;
36     while (cin >> N >> M)
37     {
38         int *p = new int[N];
39 
40         for (int i = 0; i < N; i++)
41         {
42             cin >> p[i];
43         }
44         for (int i = 0; i < M; i++)
45         {
46             cin >> ch >> A >> B;
47             if (ch == 'Q')
48             {
49                 max.push_back(getmax(p, A - 1, B - 1));
50             }
51             else if (ch == 'U')
52             {
53                 p[A - 1] = B;
54             }
55         }
56         for (vector<int>::iterator it = max.begin(); it < max.end(); it++)
57         {
58             cout << *it << endl;
59         }
60         max.clear();
61         delete [] p;
62     }
63 
64     return 0;
65 }

 

posted @ 2016-07-04 21:46  hhboboy  阅读(750)  评论(0编辑  收藏  举报