Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 45287    Accepted Submission(s): 17773

Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。

不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

 
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,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。
 
Output
对于每一次询问操作,在一行里面输出最高成绩。
 
Sample Input
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
 
Sample Output
5
6
5
9

Hint

Huge input,the C function scanf() will work better than cin

/*times memy
889ms 8584k
by orc
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int N = ;
int n,m;
struct node{
int lt,rt;
int mx;
}tree[ * N];
int a[N];
void build(int l,int r,int v)
{
tree[v].lt = l;
tree[v].rt = r;
if(l == r) {tree[v].mx = a[l];return;}
int m = (l + r) >> ;
build(l,m, * v);
build(m + ,r, * v + );
tree[v].mx = max(tree[ * v].mx,tree[ * v + ].mx);
}
void update(int v,int k,int val)//直接暴力更新
{
if(tree[v].lt == tree[v].rt)
{
if(tree[v].lt == k)
tree[v].mx = val;
return;
}
int m = (tree[v].lt + tree[v].rt) >> ;
if(k <= m) update(v * ,k,val);//更新左子树
else update(v * + ,k,val);//更新右子树
tree[v].mx = max(tree[v << ].mx,tree[(v << ) + ].mx);
//else tree[v >> 1].mx = max(tree[v].mx,tree[v + 1].mx);
}
int query(int v,int l,int r)
{
if(l == tree[v].lt && r == tree[v].rt) return tree[v].mx;
int m = (tree[v].lt + tree[v].rt) >> ;
if(r <= m) query(v * ,l,r);
else if(l > m) query(v * + ,l ,r);
else{
return max(query(v * ,l,m),query(v * + ,m + ,r));
}
}
void solve()
{
char C;
int A ,B;
for(int i = ; i <= n; ++i)
cin >> a[i];
build(,n,);
while(m--)
{
cin >> C;
cin >> A >> B;
if(C == 'Q')
{
cout << query(,A,B) <<endl;
continue;
}
else update(,A,B);
}
}
int main()
{
ios::sync_with_stdio();
while(cin >> n >> m) solve();
return ;
}
Author
linle

最新文章

  1. 【转载】oracle dbms_metadata.get_ddl的使用方法总结
  2. 概率 light oj 1104
  3. BZOJ 1179 Atm 题解
  4. DOM综合案例、SAX解析、StAX解析、DOM4J解析
  5. 详解C++中指针(*)、取地址(&amp;)、解引用(*)与引用(&amp;)的区别 (完整代码)
  6. Swift基础小结_2
  7. The Hundred Greatest Theorems
  8. 轮子来袭 vJine.Core Orm 之 03_架构分析
  9. 记一次网站服务器迁移(my)
  10. 抛出异常的区别 throw 和throw ex
  11. 【TFS】增加组员,以及用户权限分配
  12. UVA 5875 DP
  13. 怎么让猫吃辣椒 转载自 xiaotie
  14. iOS 多线程 之 GCD(大中枢派发)(一)
  15. OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
  16. matplotlib 3D数据-【老鱼学matplotlib】
  17. EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
  18. ORA-03113:通信通道的文件结尾-完美解决方案
  19. flex弹性布局属性详解!
  20. sql server用户密码批量MD5加密

热门文章

  1. IOS- 数据存储
  2. supersr--addSubview和 insertSubView 区别
  3. 已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并。按学号升序排列.
  4. Scrapy爬取美女图片 (原创)
  5. 端口扫描之王-----------nmap
  6. penghui_031413 Bat命令学习
  7. 攻城狮在路上(叁)Linux(二十)--- Linux磁盘格式化
  8. android 入门- 词汇
  9. thinkphp 两表、三表联合查询
  10. Windows下Apache服务器中自动配置二级子域名