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

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

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
解题思路:代码设置了tree数组用来存储输入的数据,tree【1】存储tree【2】和tree【3】两数的最大值,tree【2】存储tree【2*2】和tree【2*2+1】两数的最大值,tree【3】存储tree【3*2】和tree【3*2+1】两数的最大值
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 20010;int tree[MAXN<<1+10];void build_tree(int l,int r,int root){if (l == r){scanf("%d",&tree[root]);return;}int m = (l+r) >> 1;build_tree(l,m,root<<1);//右移运算符 相当于root*2;build_tree(m+1,r,root<<1|1);//右移运算符,相当于root*2+1;tree[root] = max(tree[root<<1],tree[root<<1|1]);
}void update(int pos,int date,int l,int r,int root){if (l == r){tree[root] = date;return;}int m = (l+r) >> 1;if (pos <= m)update(pos,date,l,m,root<<1);else update(pos,date,m+1,r,root<<1|1);tree[root] = max(tree[root<<1],tree[root<<1|1]);
}int query(int L,int R,int l,int r,int root){int sum = -11111111;if (L <= l && r <= R)return tree[root];int m = (l+r) >> 1;if (L <= m)sum = max(sum,query(L,R,l,m,root<<1));if (R > m)sum = max(sum,query(L,R,m+1,r,root<<1|1));return sum;
}int main(){int num,que;char op;int a,b;while (scanf("%d%d",&num,&que) != EOF){build_tree(1,num,1);for (int i = 0; i < que; i++){scanf("%*c%c %d %d",&op,&a,&b);if (op == 'U')update(a,b,1,num,1);else printf("%d\n",query(a,b,1,num,1));}}return 0;
}

HDU-1754 线段树的节点更新,储存区间的最大值相关推荐

  1. HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. HDU 1754线段树

    第一个自己动手写的线段树,1Y还是有点小激动哈(虽然是模版题) 1 #include<cstdio> 2 #include<cstring> 3 #include<alg ...

  3. poj 2777(线段树的节点更新策略)

    1 /* 2 之前的思想是用回溯的方式进行颜色的更新的!如果用回溯的方法的话,就是将每一个节点的颜色都要更新 3 通过子节点的颜色情况来判断父节点的颜色情况 !这就是TLE的原因! 4 5 后来想一想 ...

  4. I Hate It HDU - 1754 (线段树)

    注意点:scanf中使用%c时,会读取空格和回车,所以在%c之前要有一个空格 ( 或者直接使用%s也行,%s会忽略空格和回车 ).具体见下面的代码: 1 #include<iostream> ...

  5. hdu 1754 线段树(点修改)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. hdu 1698 线段树成段更新

    这么重要的数据结构还是得学啊.仿notonlysuccess的代码风格 #include <cstdio> #include <algorithm> #include < ...

  7. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  8. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  9. hdu 4831(线段树---待解决)

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

最新文章

  1. nginx防止高负载的解决方案(sysgurad模块)
  2. 关于ConcurrentHashMap在jdk1.7的升级到1.8中的变化
  3. 隐式调用 Intent 大全
  4. android 命令使用详解,Android下pm 命令详解
  5. esxi 6.7 update 3 3b_污水站运维系统,3大要点让你吃透运维本质
  6. CodeIgniter中URL含有中文字符串的解决方案
  7. 分享个 之前写好的 android 文件流缓存类,专门处理 ArrayList、bean。
  8. 研发管理---(1)持续交付
  9. python django 优势_为什么选择Django?
  10. 华为畅享8plus停产了吗_华为99元起换电池新增27款机型!同时新增一项实用功能...
  11. 采用pd.io.sql读写数据
  12. (w10)Prtsc截图键无法正常使用——解决办法
  13. 用Java来解析torrent文件
  14. 项目上线质量如何评估
  15. 算法设计技巧与分析(六):图遍历(Graph Traversal)
  16. es routing 简介
  17. gluster部署和使用
  18. 英语四级常考100个短语
  19. 6 如何保障项目按期完工? 人人都是项目经理系列(第6/13篇)
  20. 值得你收藏的几个实用识别图片文字软件都在这

热门文章

  1. 【转】CSS和SVG中的剪切——clip-path属性和clipPath元素
  2. Android 仿QQ消息界面
  3. 【数论学习笔记】同余
  4. java里面object和string的相互转换
  5. delphi 的插件机制与自动更新
  6. 开发人员必备的 Chrome 扩展
  7. MSSQLServer基础07(事务,存储过程,分页的存储过程,触发器)
  8. global.css
  9. Nuxt项目支持import写法的最新解决方案
  10. Java异常处理之InvocationTargetException(反射异常)