题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

I Hate It

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

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
题解: 标准的线段树点修改区间查询
代码:
 
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. #define N 200100
  5.  
  6. //int in() //输入外挂
  7. //{
  8. // char ch;
  9. // int ret = 0;
  10. // while(ch = getchar()) if(ch >= '0' && ch <= '9') break;
  11. // while(ch>='0' && ch <= '9'){
  12. // ret *= 10;
  13. // ret += (ch-'0');
  14. // ch = getchar();
  15. // }
  16. // return ret;
  17. //}
  18.  
  19. int n;
  20. int a[N];
  21.  
  22. int tr[N<<];
  23.  
  24. void build(int id, int l, int r)
  25. {
  26. if(l == r) {
  27. tr[id] = a[l];
  28. return;
  29. }
  30. int mid = l+r>>;
  31. tr[id] = -;
  32. if(l <= mid) {
  33. build(id<<, l, mid);
  34. tr[id] = max(tr[id], tr[id<<]);
  35. }
  36. if(r > mid) {
  37. build(id<<|, mid+, r);
  38. tr[id] = max(tr[id], tr[id<<|]);
  39. }
  40. }
  41.  
  42. void update(int id, int l, int r, int pos, int v)
  43. {
  44. if(l == r) {
  45. tr[id] = v;
  46. return;
  47. }
  48. int mid = l+r>>;
  49. if(pos <= mid) update(id<<, l, mid, pos, v);
  50. else update(id<<|, mid+, r, pos, v);
  51. tr[id] = max(tr[id<<], tr[id<<|]);
  52. }
  53.  
  54. int query(int id, int l, int r, int x, int y)
  55. {
  56. if(l>= x && r <= y) return tr[id];
  57. int mid = l+r>>;
  58. int tm1 = -, tm2 = -;
  59. if(x <= mid) tm1 = query(id<<, l, mid, x, y);
  60. if(y > mid) tm2 = query(id<<|, mid+, r, x, y);
  61. return max(tm1, tm2);
  62. }
  63.  
  64. int main()
  65. {
  66. int q;
  67. while(~scanf("%d %d", &n,&q))
  68. {
  69. for(int i = ; i <= n; i++) scanf("%d", &a[i]);
  70. build(, , n);
  71. for(int i = ; i < q; i++)
  72. {
  73. char op[];
  74. int x, y;
  75. scanf("%s %d %d", op, &x, &y);
  76. if(op[] == 'U') update(, , n, x, y);
  77. else printf("%d\n", query(, , n, x, y));
  78. }
  79. }
  80. return ;
  81. }

I Hate It(线段树点修改区间查询)的更多相关文章

  1. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. [线段树]区间修改&区间查询问题

    区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...

  3. POJ 3321 Apple Tree(DFS序+线段树单点修改区间查询)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25904   Accepted: 7682 Descr ...

  4. Hdu 1698(线段树 区间修改 区间查询)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

  5. SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)

    GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...

  6. SPOJ BGSHOOT - Shoot and kill (线段树 区间修改 区间查询)

    BGSHOOT - Shoot and kill no tags  The problem is about Mr.BG who is a great hunter. Today he has gon ...

  7. A Simple Problem with Integers POJ - 3468 线段树区间修改+区间查询

    //add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #includ ...

  8. HDU 5475(2015 ICPC上海站网络赛)--- An easy problem(线段树点修改)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5475 Problem Description One day, a useless calculato ...

  9. lintcode:线段树的修改

    线段树的修改 对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值. 设计一个 modify 的方法,接受三个参数 root. index 和 value.该 ...

随机推荐

  1. Python3.5:爬取网站上电影数据

    首先我们导入几个pyhton3的库: from urllib import requestimport urllibfrom html.parser import HTMLParser 在Python ...

  2. 502 VS 504

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/89 首先看一下概念: 502:作为网关或者代理工作的服务器尝试执 ...

  3. 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...

  4. flask 分页

    在我们学习的过程中会遇到这么样的问题,就是在我们学习的过程中会发现需要分页处理,这里呢,给大家介绍书上说的分页. @app.route('/',methods=['GET']) @app.route( ...

  5. Elasticsearch5.4常见问题总结

    最近项目中用到了Elasticsearch5.4(ES)是比较新的一个版本,使用的过程中出现了很多的问题,很是头疼,但是问题最终还是解决掉了. 问题一:ESClient获取慢,并且不能获取Client ...

  6. 每天学一点Docker(1)

    Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...

  7. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  8. python基础(六)dict字典和文件操作open

    字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...

  9. 小白的Python之路 day5 shutil模块

    shutil模块 一.主要用途 高级的文件.文件夹.压缩包 等处理模块 二.常用方法详解 1.shutil.copyfileobj(fsrc, fdst) 功能:把一个文件的内容拷贝到另外一个文件中, ...

  10. IOS 触摸事件分发机制详解

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:MelonTeam 前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案 ...