#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
int n = 0, op = 0;
while(cin >> n >> op)
{
vector<int> grades;
for(int i = 0; i < n; ++i) {
int x;
cin >> x;
grades.push_back(x);
}
/*
for(int i = 0; i < grades.size(); ++i)
cout << grades[i];
cout << endl;
*/
//cout << n << "," << op << endl;
for(int i = 0; i < op; ++i){
char p;
int a, b;
cin >> p >> a >> b;
//cout << p << "," << a << "," << b << ":";
priority_queue<int> s;
if(p == 'U'){
grades[a-1] = b;
}else if(p == 'Q'){
for(int j = min(a-1, b-1); j <= max(b-1, a-1); ++j ){
s.push(grades[j]);
}
cout << s.top() << endl;
}
}
}
}
我用了vector存放当前的成绩,用了priority_queue用来进行排序,每次查询的时候把查询区间里的都加入到queue中,输出最大的那个。
priority_queue用法:
#include <queue>
priority_queue<int> q;
q.push(...);
q.top();//默认从大到小排序,所以top()输出的是最大值