B - I Hate It

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

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

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

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#define Maxn 200005
using namespace std;
int num[Maxn];
struct Tree
{int l,r,sum;
}tree[Maxn*4];//Ï߶ÎÊ÷±È½ÏºÄ¿Õ¼äÒ»°ã¿ª3~4±¶£»
int Max(int a,int b)
{if(a>b)return a;else return b;
}
void build (int k,int l,int r)
{tree[k].l=l;tree[k].r=r;if(tree[k].l==tree[k].r){tree[k].sum=num[l];return;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);tree[k].sum=Max(tree[k<<1].sum,tree[k<<1|1].sum);
}
void update(int k,int pos,int val)
{if(tree[k].l==tree[k].r&&tree[k].l==pos){tree[k].sum=val;return ;}int mid=(tree[k].l+tree[k].r)>>1;if(pos<=mid)update(k<<1,pos,val);else update(k<<1|1,pos,val);tree[k].sum=Max(tree[k<<1].sum,tree[k<<1|1].sum);
}
int query(int k,int l,int r)
{if(l==tree[k].l&&tree[k].r==r)return tree[k].sum;int s;int mid=(tree[k].l+tree[k].r)>>1;if(r<=mid) s=query(k<<1,l,r);else if(l>mid) s=query(k<<1|1,l,r);else s=Max(query(k<<1,l,mid),query(k<<1|1,mid+1,r));return s;
}
int n,m;
int main()
{while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++)scanf("%d",&num[i]);build(1,1,n);char ch;int a,b;for(int i=1;i<=m;i++){scanf(" %c%d%d",&ch,&a,&b);if(ch=='U'){num[a]=b;update(1,a,b);}else if(ch=='Q')printf("%d\n",query(1,a,b));}}return 0;
}

B - I Hate It(单点更新)(区间求最大值)相关推荐

  1. 卿学姐与公主(线段树区间求最大值)

    A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  2. hdu 1540(线段树单点更新 区间合并)

    解题思路:这一题要求的是连续区间,所以可以把它的子区间合并,这里运用线段树,但是在保存节点信息的方面要做一点修改 lsum:从这个区间的左端点往右能够找到的最大连续区间: rsum:从这个区间的右端点 ...

  3. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)

    敌兵布阵                                                                             Time Limit: 2000/10 ...

  4. hdu 1754 I Hate It(线段树之 单点更新+区间最值)

    I Hate It                                                                             Time Limit: 90 ...

  5. hdu4417:线段树单点更新区间求和,离线 Super Mario

    Description Mario is world-famous plumber. His "burly" figure and amazing jumping ability ...

  6. A - 卿学姐与公主(线段树+单点更新+区间极值)

    A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. HDU ACM 4031 Attack (树状数组--单点查询+区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 用了树状数组的区间更新 单点查找(一般为单点更新 区间查找) 例如 区间(2,4)加1 则Updata(2 ...

  8. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)

    题干: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.  这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当 ...

  9. hdu3074 线段树求区间乘积(单点更新)

    题意:       给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余. 思路:       线段树单点更新,简单题目,不多解释,具体看代码. #i ...

  10. 线段树求区间和(单点更新)

    题目1:敌兵布阵  线段树的主要操作:(1)建立线段树(Build)          (2)更新区间值 (Update)           (3)查询区间(Query) 写法一: #include ...

最新文章

  1. Python 3.8即将发布,这几个变化你必须知道
  2. 路由器mstp多域配置举例
  3. Delphi对象池MyObjectPool.pas
  4. SQL SERVER镜像切换
  5. P1060 开心的金明(01背包)
  6. poj2976 Dropping tests(01分数规划 好题)
  7. 牛客题霸 [ 实现二叉树先序,中序和后序遍历]C++题解/答案
  8. mysql 从库 问题_一篇文章帮你解决Mysql 中主从库不同步的问题
  9. 持有至少百万美元钱包本周增至66,540,增长了150%
  10. [linux]远程kill进程
  11. 游戏设计阻力探秘之扩展空间
  12. 进度管理案例分析——常见问题及答案
  13. echarts实现中国地图区域分布图 vue + echarts
  14. 基于Struts2和hibernate的WebSocket聊天室的实现教程五:聊天机制
  15. 魅族设置语音录音服务器,魅族手机微信怎么开启录音权限呀有步骤图吗
  16. Windows无法完成格式化U盘终结解决方法
  17. 网易云接口手机号验证码验证登录
  18. 想用FPGA加速神经网络,这两个开源项目你必须要了解
  19. 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)
  20. 源码推荐 VVebo剥离的TableView绘制

热门文章

  1. 程序之间耦合以及解耦问题探究
  2. 在ubuntu中自定义安装nginx
  3. 通过javaBean反射转换成mybatis映射文件
  4. Java-idea-eclipse-快捷键【mac,win】
  5. 360换机 v2.12.5.9 官方安卓版
  6. HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 的区别
  7. DirectAdmin面板在线解压缩的.tar.gz文件
  8. 实现接口与显式实现接口的区别
  9. 《Windows核心编程》之七 - 关于Windows 2000中内存的分区
  10. JDBC连接池JDBCTemplate