#include<cstdio>
#include<string.h>
using namespace std;
int ans;
int max1=;
int a[];
struct Node{
int left;
int right;
int max;
}node[];
void TreeMake(int l,int r,int i)
{
node[i].left=l;
node[i].right=r;
node[i].max=;
if(l==r)
{
node[i].max=a[l];//是a[l]!!!!!
return;
}
else
{
int mid=(l+r)/;
TreeMake(l,mid,*i);
TreeMake(mid+,r,*i+);
node[i].max=node[*i].max>node[*i+].max?node[*i].max:node[*i+].max;//注意更新最大值,回溯
}
}
void Updata_tree(int l,int i)
{
if(node[i].left==l&&node[i].right==l)
{
node[i].max=ans;
return;
} else{
int mid=(node[i].left+node[i].right)/;
if(l<=mid) Updata_tree(l,*i);
if(l>mid) Updata_tree(l,*i+);
node[i].max=node[*i].max>node[*i+].max?node[*i].max:node[*i+].max;//注意回溯!!
} } void Query_tree(int l,int r,int i)
{
//if(node[i].left==l&&node[i].right==r)
// return node[i].max;
//
if(node[i].left>=l&&node[i].right<=r)
{
if(max1<node[i].max)
max1=node[i].max;
return;
}
int mid=(node[i].left+node[i].right)/;
if(r<=mid) Query_tree(l,r,*i);
else if(l>mid) Query_tree(l,r,*i+);
else
{
Query_tree(l,r,*i);
Query_tree(l,r,*i+);
}
} int main()
{
int n,m;
char ch[];
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
TreeMake(,n,);
while(m--)
{
scanf("%s",ch);
int x,y;
scanf("%d %d",&x,&y);
max1=;
if(ch[]=='Q')
{
Query_tree(x,y,);//查询(x,y)区间
printf("%d\n",max1);
}
if(ch[]=='U')
{
ans=y;
Updata_tree(x,);
}
}
}
return ;
}

Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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 

随机推荐

  1. AJAX需要注意的

    当你写好了与数据库连接的时候,例如这段代码:xmlHttp.open("GET","check.php?user="+url,true); 你不要认为你段代码就 ...

  2. C#之Lock

    lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁. class Program { static void Main(string[] args) { Thre ...

  3. moffiestyle

    听说    moffie是   带着胭脂粉气息的男人    为什么用这个名字    因为   我觉得   男生   最美  在   浓妆妖艳的时候 据说    南北朝   是  流行   男人化妆的 ...

  4. 用JQuery Validate框架,在IE8下验证报错问题解决

    网站后台用了JQuery Validate框架,版本是jQuery Validation Plugin 1.8.1 因为用的时间比较久了,一直没有更新新版本. 最近公司信息录入员有调整,没有IE11浏 ...

  5. 一个简单的金额平均分配函数(C#版)

    //总金额平均分配给总人数 //参数说明:总金额,总人数,最大金额为平均金额的倍率 public double[] GetList(double zje,int zrs,int max) { doub ...

  6. js动画之多物体运动

    多个物体这不能使用一个定时器了,要给每个物体一个定时器 <!DOCTYPE html> <html lang="en"> <head> < ...

  7. ubuntu关于apache服务命令

    一.Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start 二. ...

  8. 用powershell+excel行列转置三步走

    本文重点讲解第一步,手动在excel表中输入公式,或者用powershell自动输入公式. 第二步,用powershell向excel中写入数据,略. 第三步,用powershell从excel中读取 ...

  9. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. python的各种编辑器-PyScripter、pycharm 、atom、vscode、Sublime Text等等

    RT,本文主要列举python的各种编辑器-PyScripter.pycharm .atom.vscode.Sublime Text等等. PyScripter 开源 免费 windows only ...