I Hate It

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

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

Hint

Huge input,the C function scanf() will work better than cin

Author
linle
Source
2007省赛集训队练习赛(6)_linle专场

解题思路:

基本的线段树单点更新,查询某一区间的最大值。

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=200005;
int grade[maxn<<2];
int n,m;
int a,b;
char c;void PushUp(int rt)//从下自上更新最大值
{if(grade[rt<<1]>=grade[rt<<1|1])grade[rt]=grade[rt<<1];elsegrade[rt]=grade[rt<<1|1];
}
void built(int l,int r,int rt)
{if(l==r){scanf("%d",&grade[rt]);return;}int m=(l+r)>>1;built(lson);built(rson);PushUp(rt);
}
void change(int p,int num,int l,int r,int rt)
{if(l==r){grade[rt]=num;return;}int m=(l+r)>>1;if(p<=m)change(p,num,lson);elsechange(p,num,rson);PushUp(rt);
}int query(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R){return grade[rt];}int ans=0;int m=(l+r)>>1;if(L<=m) ans=max(ans,query(L,R,lson));//取最大值if(R>m) ans=max(ans,query(L,R,rson));return ans;
}
int main()
{while(scanf("%d%d",&n,&m)==2)//加上==2就不超时了,或者写成~scanf("%d%d",&n,&m)也可以{built(1,n,1);for(int i=1;i<=m;i++){scanf("%s",&c);if(c=='Q'){scanf("%d%d",&a,&b);printf("%d\n",query(a,b,1,n,1));}else{scanf("%d%d",&a,&b);change(a,b,1,n,1);}}}return 0;
}

转载于:https://www.cnblogs.com/sr1993/p/3697903.html

[ACM] hdu 1754 I Hate It (线段树,单点更新)相关推荐

  1. HDU 1166 敌兵布阵(线段树:点更新,区间求和)

    HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...

  2. HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)

    线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  3. HDUOJ----1166敌兵布阵(线段树单点更新)

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

  4. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  5. 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...

    [原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...

  6. hdu 5692 Snacks(dfs序+线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692 解题思路:这道题是树节点的点权更新,而且涉及到子树,常用的思路是利用dfs序,用线段树来对区间进 ...

  7. HDU 1754 I Hate It 线段树

    I Hate It Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...

  8. 线段树(单点更新,区间查询) HDU 1754 I Hate It

    题目链接 线段树的模板 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include&l ...

  9. hdu 1698 Just a Hook 线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Let us number the consecutive metallic sticks of ...

  10. hdu 1698 Just a Hook(线段树区间更新·经典)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698 数据:case,n,q,q行x,y,z.在长度为n的hook上进行q次区间更新,把它们的价值改变.最 ...

最新文章

  1. Xilinx的FPGA命名规则
  2. Robotium只有apk文件测试实例
  3. axure能做剪切蒙版吗_卫生间瓷砖不打掉能做防水吗
  4. 【论文解读】​YOLOX: Exceeding YOLO Series in 2021
  5. Glide-源码分析(三)
  6. java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
  7. zmq pub/sub使用详解
  8. 智源首席科学家孙茂松当选欧洲科学院外籍院士
  9. flutter 图片编辑矩形 editBox
  10. Protobuf-net ProtoGen的使用
  11. epoll的ET工作模式和LT工作模式
  12. 实验记录 | scATAC-seq数据的比对(一)
  13. dymola学习笔记第三天——胡言乱语篇
  14. OllyDbg分析crackme-AcidBurn
  15. 截图工具GifCam简单使用教程
  16. 【客服狂收offer秘籍】面试常见问题拆解
  17. Python读取文件路径并移动到指定文件夹
  18. java中的properJavaRDP实现远程桌面连接windows主机
  19. 使用Numpy快速分析股票数据——计算移动平均线及日周均线之间的转换
  20. Angular 踩坑之版本升级—— TS / Node版本

热门文章

  1. PLSQL 执行 for update 语句被锁定的解决办法
  2. Phonegap + JqueryMobile常见问题
  3. HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求
  4. 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
  5. 丢了好几年的 Auto CAD又拿起来......
  6. 字王谈M1字形与个人云字库
  7. 【分享】java反射获取、设置、打印对象属性,对象转map基础工具
  8. MCSE认证全攻略(初、中、高)
  9. flink读不到kafka数据问题
  10. spark和hadoop升级记录(持续更新中)