线段树的第一发。

哪天忘了还能够让自己找找回顾。

                                                           

线段树操作:

build  : 建树。

update:点改动:

query:查询 

                                                           

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。

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

Output

对于每一次询问操作,在一行里面输出最高成绩。

5

6

5

9

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define INF 0x3fffffff
#define bug(a) cout<<a<<" ----->\n"
using namespace std; const int N=200010; int maxt[4*N];
int a[N];
int n,q; void build(int o,int L,int R)
{
int m;
if(L==R) { maxt[o]=a[L];return;}
m=(L+R)/2;//bug(o);
build(2*o,L,m);
build(2*o+1,m+1,R);
maxt[o]=max(maxt[2*o],maxt[2*o+1]); } int query(int ql,int qr,int o,int L,int R)
{
int m=(L+R)/2,ans=-INF;
if(ql<=L&&R<=qr) return maxt[o];
if(ql<=m) ans=max(ans,query(ql,qr,2*o,L,m));
if(m<qr) ans=max(ans,query(ql,qr,2*o+1,m+1,R));
return ans;
} void update(int p,int v,int o,int L,int R)
{
if(L==R){maxt[o]=v;return;}
int m=(L+R)>>1;
if(p<=m) update(p,v,2*o,L,m);
else update(p,v,2*o+1,m+1,R);
maxt[o]=max(maxt[2*o],maxt[2*o+1]);
} int main()
{
char c[2];
int d,b;
while(scanf("%d%d",&n,&q)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",a+i);
//bug(1);
build(1,1,n); for(int i=1;i<=q;i++)
{
scanf("%s%d%d",c,&d,&b);
if(c[0]=='Q')
printf("%d\n",query(d,b,1,1,n));
else
update(d,b,1,1,n);
}
}
return 0;
}

最新文章

  1. 外观模式/facade模式/结构型模式
  2. 移动端设备UA检测
  3. java中的动态代理
  4. NGINX + LUA实现复杂的控制 --源自http://outofmemory.cn/code-snippet/14396/nginx-and-lua
  5. Erlang 从入门到精通(一) 下载安装
  6. 利用在线工具根据JSon数据自动生成对应的Java实体类
  7. spring学习笔记---第三方SDK(Rest API)和Jaskson的巧用
  8. 在Linux上安装Memcached服务
  9. .Net程序员快速学习安卓开发-布局和点击事件的写法
  10. eclipse C 开发 Stm32
  11. 教你一步搭建Flume分布式日志系统
  12. 201521123027 &lt;java程序设计&gt;第十二周作业总结
  13. Python 标准库 urllib2 的使用细节(转)
  14. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
  15. Android开发之手把手教你写ButterKnife框架(二)
  16. [Swift]LeetCode696. 计数二进制子串 | Count Binary Substrings
  17. OpenStack共享组件
  18. 《http权威指南》读书笔记10
  19. MySQL NULL处理
  20. IOS团队开发之——CocoaPods 第三方库管理工具

热门文章

  1. CentOS7 安装Python3.6.4
  2. python3-开发进阶Flask的基础(3)
  3. Android Studio NDK开发浅谈
  4. Android UI框架基本概念
  5. List集合多次排序
  6. 【BZOJ】2653: middle
  7. Educational Codeforces Round 10 C. Foe Pairs 水题
  8. es6 箭头函数 this 问题
  9. 复制到剪切板js代码(转)
  10. [c#基础]使用抽象工厂实现三层