HDU 1754 I hate it【线段树之单点替换区间最值】
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; struct Node {int l, r, mid, max1; }node[1000000]; void init(int a, int b, int n) {node[n].l=a;node[n].r=b;node[n].mid=(a+b)/2;node[n].max1=-1;if(a+1==b)return ;init(a, (a+b)/2, 2*n);init((a+b)/2, b, 2*n+1); } void add(int pos, int value, int n) {if(value>node[n].max1)node[n].max1=value; if(node[n].l+1==node[n].r)return ;if(pos<node[n].mid)add(pos, value, 2*n);elseadd(pos, value, 2*n+1); } int maxnum(int a, int b, int n) {if(node[n].l==a&&node[n].r==b)return node[n].max1;if(a<node[n].mid) { if(b<=node[n].mid) { return maxnum(a,b,2*n); } else { return max(maxnum(a,node[n].mid,2*n),maxnum(node[n].mid,b,2*n+1)); } } else { return maxnum(a,b,2*n+1); } } int main() {int n, m, a, b, i;char ch;while(scanf("%d%d", &n, &m)!=EOF){init(1, n+1, 1); for(i=1; i<=n; i++){scanf("%d", &a);add(i, a, 1);} getchar(); for(i=1; i<=m; i++){scanf("%c %d%d", &ch, &a, &b);getchar();if(ch=='Q')printf("%d\n", maxnum(a, b+1, 1));if(ch=='U')add(a, b, 1);}} }
转载于:https://www.cnblogs.com/Hilda/archive/2012/08/09/2629989.html
HDU 1754 I hate it【线段树之单点替换区间最值】相关推荐
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It Time Limit: 90 ...
- HDU 1754 I Hate It 线段树
I Hate It Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
敌兵布阵 Time Limit: 2000/10 ...
- hdu 敌兵布阵(线段树之单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- hdu - 6681 Rikka with Cake 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:给定一个左下顶点为,右上顶点为的矩形,然后给你k条射线,每条射线的起点及方向(上下左右)都 ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- hdu 6406 Taotao Picks Apples 线段树
hdu 6406 多校八第十题,设d1[ i ]为从a1开始到 ai 的最长递增子序列长度,设d2[ i ]为从ai开始到an的最长递增子序列长度,假设要把ap改为q,可以把序列分为1到p-1和p+1 ...
- HDU 4417 Super Mario(线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
最新文章
- Qt DOM读写XML文件
- Linux下MySQL链接被防火墙阻止
- 【Qt】仿360安全卫士界面(自定义阴影边框类)
- C++ Priemer目录索引
- 大数据到底有多大,人工智能到底有多能
- 趣图:老师讲算法 vs 油管三哥讲算法
- android 3.x,Android Studio3.x的坑(三)
- QCon思考之通过Quora和Spotify案例,直击数据处理背后的魅影
- 判断web app是否从主屏启动
- override 与virtual的理解
- Vue:Vue-cli2结合mavonEditor实现MarkDown编辑器
- 强联通分量:Tarjan缩点
- Word文档 公式换行 小技巧
- 比较自然语言与计算机语言,计算机语言与自然语言的比较研究.pdf
- 知识推理——正向链接推理
- Stellarium0.9.0新功能
- Form表单提交数据的几种方式
- HTML邮件制作心得
- 移动100m宽带慢的要死_移动宽带不稳定怎么办,移动100m宽带慢解决方法
- Coursera | Introduction to Data Science in Python(University of Michigan)| Assignment2
热门文章
- Java包数据消息头消息尾_读Socket流时产生阻塞的解决方案(粘包拆包问题)
- python分析数据走势_Python数据分析及可视化实例之个股走势预测(26)
- excel小写转大写公式_Word如何一键转PPT/Excel,来看看用对的方式操作office有多方便...
- 上计算机课睡觉检讨书400,小学生上自习课睡觉检讨书
- 3.5 定向搜索的误差分析
- opencv-api erode
- git remote(远程仓库操作)
- VMWare NSX安全生产和DMZ用例的详细设计指南
- Java设计模式学习总结(6)——创建型模式之原型模式
- 敏捷开发系列学习总结(11)——Scrum敏捷开发流程的三个角色、四个会议和三个物件