(线段树) I Hate It --hdu--1754 (入门)
链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1754
这次的代码和上个代码很相似,只不过上次的节点里存的是sum值,这次节点里存放的是Max, 正在慢慢找感觉
节点里保存的值是十分重要的!!!!
代码:
- #include<stdio.h>
- #include<algorithm>
- #include<stdlib.h>
- #include<string.h>
- using namespace std;
- #define Lson r<<1
- #define Rson r<<1|1
- const int N = *1e6+;
- struct SegmentTree
- {
- int L, R;
- int MAX;
- int Mid()
- {
- return (R+L)>>;
- }
- }a[N<<];
- void BuildSegTree(int r, int L, int R)
- {
- a[r].L=L, a[r].R=R;
- if(L==R)
- {
- scanf("%d", &a[r].MAX);
- return ;
- }
- BuildSegTree(Lson, L, a[r].Mid());
- BuildSegTree(Rson, a[r].Mid()+, R);
- a[r].MAX = max(a[Lson].MAX, a[Rson].MAX);
- }
- void Update(int r, int i, int e)
- {
- a[r].MAX = max(a[r].MAX, e);
- if(a[r].L==a[r].R)
- return ;
- if(i<=a[r].Mid())
- Update(Lson, i, e);
- else if(i>a[r].Mid())
- Update(Rson, i, e);
- }
- int Query(int r, int L, int R)
- {
- if(a[r].L==L && a[r].R==R)
- return a[r].MAX;
- if(R<=a[r].Mid())
- return Query(Lson, L, R);
- else if(L>a[r].Mid())
- return Query(Rson, L, R);
- else
- {
- int Lsum = Query(Lson, L, a[r].Mid());
- int Rsum = Query(Rson, a[r].Mid()+, R);
- return max(Lsum, Rsum);
- }
- }
- int main()
- {
- int n, m;
- while(scanf("%d%d", &n, &m)!=EOF)
- {
- BuildSegTree(, , n);
- char s[];
- int L, R, A, B;
- while(m--)
- {
- scanf("%s", s);
- if(s[]=='Q')
- {
- scanf("%d%d", &L, &R);
- printf("%d\n", Query(, L, R));
- }
- else
- {
- scanf("%d%d", &A, &B);
- Update(, A, B);
- }
- }
- }
- return ;
- }
(线段树) I Hate It --hdu--1754 (入门)的更多相关文章
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 线段树 扫描线 L - Atlantis HDU - 1542 M - City Horizon POJ - 3277 N - Paint the Wall HDU - 1543
学习博客推荐——线段树+扫描线(有关扫描线的理解) 我觉得要注意的几点 1 我的模板线段树的叶子节点存的都是 x[L]~x[L+1] 2 如果没有必要这个lazy 标志是可以不下传的 也就省了一个pu ...
- POJ3648 A Simple Problem with Integers(线段树之成段更新。入门题)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 53169 Acc ...
- 线段树练习[单点更新] HDU 2795 Billboard
题目大意:有一个h*w的公告榜,可以依次在上面添加信息.每个信息的长度为x,高为1. 优先在最上面加入,如果空间足够的话,然后优先放在最左面.统计每条公告最终的位置,即它所在的行数. 这里是线段树来存 ...
- 线段树->面积并 Atlantis HDU - 1542
题目链接:https://cn.vjudge.net/problem/HDU-1542 题目大意:求面积并 具体思路:我们首先把矩形分割成一横条一横条的,然后对于每一个我们给定的矩形,我们将储存两个点 ...
- 线段树 + 区间更新: HDU 4893 Wow! Such Sequence!
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 线段树 面积并问题 hdu 1255 1542
重点整理面积并的思想 以及PushUp的及时更新 还有就是cover的实现 以及建树每个节点存的信息(每个节点存的是一个线段的信息) http://www.tuicool.com/articles/6 ...
- 线段树(区间维护):HDU 3308 LCIS
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 线段树(维护最大值):HDU Billboard
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- Get与Post提交方式的区别
用 curl 测试 post 请求: curl -d "agentCode=RB&startDate=2017-07-01&endDate=2017-09-01& ...
- 原生nodejs 学习笔记1
网上许多nodejs教程或书藉都是教你调用第三方模块来编写nodejs应用的,虽然这是非常便捷的,但是封装太厚,你基本一点东西还是没有学到.人家的模块,人家想怎么改就行,可以下一版本就改了接口,你的应 ...
- JAVA中的异常疑点解析
1 final, finally, finalize的区别. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承. 内部类要访问局部变量,局部变量必须定义成final类型 ...
- CentOS7系列搭建Openvpn
环境:CentOS Linux release 7.3.1611 (Core) 查看os版本命令:[root@openvpn ~]# cat /etc/redhat-release 命令记录如下: y ...
- fiddler 抓取 逍遥安卓模拟器 https包
1.打开fiddler,进行相关设置 Tools--Fiddler Options 接下来进行客户端网络配置 1 查看电脑ip地址,ipconfig 逍遥游模拟器中使用自带的浏览器,访问192.168 ...
- IPMS 元件实作
一.改用zg框架的jsp 1.引入表头和表尾jsp <%@ include file="../../jsp/menuHeader.jsp"%> <%@ inclu ...
- C#语法基础
泛型 1.default(T)可以返回T类型的空值,因为你不知道T是值类型还是引用类型,所以别擅自用null 2.泛型约束 很多时候我们不希望使用者太过自由 我们希望他们在使用我们设计的泛型类型时 不 ...
- 关于元表,self,元方法__index
这是需要仔细分辨的几个概念. 元表:相当于table的隐藏属性. 只有固定的一些方法,如__index,__tostring,__add等,称为元方法. 虽然是固定的,但是任何table都可以作为任何 ...
- python之字符串【str】
#Auther Bob#--*--conding:utf-8 --*-- #定义一个str的对象,有下面两种方法name = 'Bob abc'job = str('it')print(type(na ...
- K组翻转链表 · Reverse Nodes in k-Group
[抄题]: 给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下.链表元素个数不是k的倍数,最后剩余的不用翻转. [思维问题]: [一句话思路]: // reverse head->n1 ...