#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. lock

    #ifndef lock_h #define lock_h #include <stdint.h> #include <string.h> #include "myd ...

  2. μC/OS-Ⅲ系统的任务切换和任务调度

    一.任务切换 在操作系统中当任务需要从一个任务切换到另外一个任务时,要将当前任务的现场保存到当前任务的堆栈中(当前任务现场主要指CPU相关寄存器),然后回复新任务的现场并执行新任务.这个叫做上下文切换 ...

  3. 【Python⑥】python的缩进,条件判断和循环

    缩进 Python的最大特色是用缩进来标明成块的代码. 这点和其他语言区别很明显,比如大家熟悉的C语言里: ) { num+=; flag-=; } 而在python中: if flag>= 0 ...

  4. Linux 内核常见宏定义

    我们在阅读Linux内核是,常见到这些宏 __init, __initdata, __initfunc(), asmlinkage, ENTRY(), FASTCALL()等等.它们定义在 /incl ...

  5. 关于css样式2

    css文本 CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. 缩进文本 把 Web 页面上的段落的第一行缩进,这是一种最常用 ...

  6. 【转】Nginx中upstream有以下几种方式:

    1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream bak ...

  7. tomcat启动不了

    今天弄了一个项目想在在自己的电脑上面运行起来,当部署在tomcat上的时候发现tomcat就是启动不来,思忖了一段时间后发现原来是tomcat的相关jar没有导入进去.所以,properties-&g ...

  8. JAVA第四周作业

    import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...

  9. Java之多线程开发时多条件Condition接口的使用

    转:http://blog.csdn.net/a352193394/article/details/39454157 我们在多线程开发中,可能会出现这种情况.就是一个线程需要另外一个线程满足某某条件才 ...

  10. 计算机开放电子书汇总(包括二十多本python相关的图书教程)

    计算机开放电子书汇总(包括二十多本python相关的图书教程) https://github.com/it-ebooks/it-ebooks-archive 这个汇总包含了各种计算机相关的开放图书和文 ...