线段树模板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): 100523 Accepted Submission(s): 37845
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
分析:此题为经典线段树模板题, 标志性的更新和查询操作, 如果无数条更新和查询操作时, 想到线段树, 很可能就是一道与此题类似的线段树题欧。。
ac代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 const int N=200000+50; 7 struct tree{ 8 int l, r, maxn; 9 }; 10 tree t[N*3]; 11 int ans; 12 13 void build(int m, int l, int r) 14 { 15 t[m].l = l; 16 t[m].r = r; 17 if(l==r) 18 { 19 scanf("%d", &t[m].maxn); 20 return; 21 } 22 int mid = (l + r) >> 1; 23 build(m<<1, l, mid); 24 build(m<<1|1, mid+1, r); 25 t[m].maxn = max(t[m<<1].maxn, t[m<<1|1].maxn); 26 } 27 void U(int m, int a, int b) 28 { 29 if(t[m].l == t[m].r && t[m].l == a) 30 { 31 t[m].maxn = b; 32 return; 33 } 34 int mid = (t[m].l + t[m].r) >> 1; 35 if(a <= mid) 36 U(m<<1, a, b); 37 else 38 U(m<<1|1, a, b); 39 t[m].maxn = max(t[m<<1].maxn, t[m<<1|1].maxn); 40 } 41 void Q(int m, int l, int r) 42 { 43 if(t[m].l == l && t[m].r == r) 44 { 45 ans = max(ans, t[m].maxn); 46 return; 47 } 48 int mid = (t[m].l + t[m].r) >> 1; 49 if(r <= mid) 50 Q(m<<1, l, r); 51 else if(l >= mid + 1) 52 Q(m<<1|1, l, r); 53 else 54 { 55 Q(m<<1, l, mid); 56 Q(m<<1|1, mid+1, r); 57 } 58 } 59 int main() 60 { 61 int n, m; 62 while(scanf("%d%d", &n, &m)!=EOF) 63 { 64 build(1, 1, n); 65 for(int i=0;i<m;i++) 66 { 67 getchar(); 68 char c; 69 int a, b; 70 scanf("%c", &c); 71 scanf("%d%d", &a, &b); 72 if(c == 'Q') 73 { 74 ans = 0; 75 Q(1, a, b); 76 printf("%d\n", ans); 77 } 78 else 79 U(1, a, b); 80 } 81 } 82 return 0; 83 }
View Code
转载于:https://www.cnblogs.com/sqdtss/p/9437786.html
线段树模板hdu 1754:I Hate It相关推荐
- hdu1156(简单线段树 模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1754 I hate it线段树模板 区间最值查询
题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...
- 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)
problem 给定一个长为n的序列,m次询问 每次询问有3种操作 1.一段区间全部乘一个值 2.一段区间全部加一个值 3.询问一段区间和%P solution 不就一颗线段树么,看朕10分钟A掉.. ...
- 洛谷3373 线段树模板
题目详情:https://www.luogu.org/problemnew/show/P3373 这个线段树模板写的头疼(最后纠错发现一个long long没开差点一口血喷出来),思路就是在普通的求区 ...
- ccf除法-线段树模板
这题的要求是对区间处理,查询区间和,一看就是线段树模板题,下面是代码 #include<iostream> using namespace std; int pp[100001]; str ...
- 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题
题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...
- 线段树模板题3:区间染色问题
1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...
- Just a Hook(线段树模板)
题意 n个铜棒子,对其进行区间修改,将区间中的棒子价值增加,问最后所有棒子的总价值是多少. 铜棒:1 银棒:2 金棒:3 思路 线段树模板题 建树时,每个节点值都为1,对其进行区间修改 最后输出根节点 ...
- ACM算法-----线段树模板
上模板: const int MAX = 999999; struct treenode {int val;//树节点值int right, left;//左右区间 }tree[MAX]; int t ...
最新文章
- python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号
- C# WinForm控件、自定义控件整理(大全)
- 摄像头视频推流python_摄像头视频推流装置及方法与流程
- 【MyBatis】MyBatis自动生成代码之查询爬坑记
- 可简单图化算法(Havel算法)
- Swoole Interview
- ssrs 基于表达式显示_基于表达式的访问控制
- oracle 存储过程获取当前日期
- 【程序设计】编程语言的抽象层次
- UG NX 12 草图技巧与方法分析
- js实现上传图片之后回显
- .net扫盲-网页对话框应用
- Java学习资料(四)——尚学堂马士兵视频
- websphere7 mysql_websphere7
- 计算机简史:你想不通去脉 是因为你不了解来龙
- linux服务器关机日期,linux服务器last查看关机记录
- java web编写的在线问卷系统 完整源码 下载直接运行
- outlook怎么删除服务器备份文件,如何彻底删除outlook的一切数据,包括账户信息和邮件...
- 实战 | 如何利用 Scrapy 编写一个完整的爬虫!
- CALIPSO数据批量下载方法
热门文章
- Android studio无法连接识别检测各种模拟器和手机的问题 (万能方案)。
- Android_高清加载巨图方案 拒绝压缩图片
- Java.lang.IllegalStateException Activity has been destroyed
- ireport 找不到子报表:Could not load object from location
- android 快速新建字符资源
- app启动速度阶段指标
- /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
- C# webBrowser禁止在新窗口打开,强制在本窗口打开
- 2018-2019-2 20165209 《网络对抗技术》Exp4:恶意代码分析
- pycharm专业版(window)安装