[ACM] hdu 1754 I Hate It (线段树,单点更新)
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
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
Huge input,the C function scanf() will work better than cin
解题思路:
基本的线段树单点更新,查询某一区间的最大值。
#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 (线段树,单点更新)相关推荐
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)
线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...
- HDUOJ----1166敌兵布阵(线段树单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...
[原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...
- hdu 5692 Snacks(dfs序+线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692 解题思路:这道题是树节点的点权更新,而且涉及到子树,常用的思路是利用dfs序,用线段树来对区间进 ...
- HDU 1754 I Hate It 线段树
I Hate It Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...
- 线段树(单点更新,区间查询) HDU 1754 I Hate It
题目链接 线段树的模板 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include&l ...
- hdu 1698 Just a Hook 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Let us number the consecutive metallic sticks of ...
- hdu 1698 Just a Hook(线段树区间更新·经典)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698 数据:case,n,q,q行x,y,z.在长度为n的hook上进行q次区间更新,把它们的价值改变.最 ...
最新文章
- Xilinx的FPGA命名规则
- Robotium只有apk文件测试实例
- axure能做剪切蒙版吗_卫生间瓷砖不打掉能做防水吗
- 【论文解读】​YOLOX: Exceeding YOLO Series in 2021
- Glide-源码分析(三)
- java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
- zmq pub/sub使用详解
- 智源首席科学家孙茂松当选欧洲科学院外籍院士
- flutter 图片编辑矩形 editBox
- Protobuf-net ProtoGen的使用
- epoll的ET工作模式和LT工作模式
- 实验记录 | scATAC-seq数据的比对(一)
- dymola学习笔记第三天——胡言乱语篇
- OllyDbg分析crackme-AcidBurn
- 截图工具GifCam简单使用教程
- 【客服狂收offer秘籍】面试常见问题拆解
- Python读取文件路径并移动到指定文件夹
- java中的properJavaRDP实现远程桌面连接windows主机
- 使用Numpy快速分析股票数据——计算移动平均线及日周均线之间的转换
- Angular 踩坑之版本升级—— TS / Node版本
热门文章
- PLSQL 执行 for update 语句被锁定的解决办法
- Phonegap + JqueryMobile常见问题
- HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求
- 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
- 丢了好几年的 Auto CAD又拿起来......
- 字王谈M1字形与个人云字库
- 【分享】java反射获取、设置、打印对象属性,对象转map基础工具
- MCSE认证全攻略(初、中、高)
- flink读不到kafka数据问题
- spark和hadoop升级记录(持续更新中)