HDU 1754线段树
第一个自己动手写的线段树,1Y还是有点小激动哈(虽然是模版题)
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const int SIZE=200005;
6 const int INF=1000000;
7 int maxv[SIZE<<2];
8 int num[SIZE];
9 void build(int l,int r,int rt)
10 {
11 if(l==r){
12 maxv[rt]=num[l];
13 return ;
14 }
15 int mid=(l+r)>>1;
16 build(l,mid,rt<<1);
17 build(mid+1,r,rt<<1|1);
18 maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
19 }
20 int findmax(int L,int R,int l,int r,int rt)
21 {
22 if(L<=l&&R>=r) return maxv[rt];
23 int mid=(l+r)>>1;
24 int ret=-INF;
25 if(L<=mid) ret=max(ret,findmax(L,R,l,mid,rt<<1));
26 if(R>mid) ret=max(ret,findmax(L,R,mid+1,r,rt<<1|1));
27 return ret;
28 }
29 void update(int l,int r,int rt,int v,int p)
30 {
31 int mid=(l+r)>>1;
32 if(l==r) maxv[rt]=p;
33 else{
34 if(v<=mid) update(l,mid,rt<<1,v,p);
35 else update(mid+1,r,rt<<1|1,v,p);
36 maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
37 }
38 }
39 int main()
40 {
41 //freopen("data.in","r",stdin);
42 int m,n;
43 int i,j;
44 while(scanf("%d%d",&n,&m)!=EOF)
45 {
46 for(i=1;i<=n;i++)
47 scanf("%d",&num[i]);
48 build(1,n,1);
49 for(i=1;i<=m;i++)
50 {
51 int a,b;
52 char c;
53 getchar();
54 scanf("%c %d %d",&c,&a,&b);
55 if(c=='Q')
56 printf("%d\n",findmax(a,b,1,n,1));
57 else if(c=='U')
58 update(1,n,1,a,b);
59 }
60 }
61 return 0;
62 }
虽然自己理解线段树也不深刻,只是掌握了一点皮毛而已,但是觉得线段树的理解在于它是一颗完全二叉树因此可以以数组的形式表示出来。再加上只要理解好线段树的区间覆盖的问题我想基本的题还是能写了
HDU 1754线段树的更多相关文章
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU(1754),线段树,单点替换,区间最值
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...
- hdu 1754 线段树入门
线段树点修改 区间最大值查询 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1754 线段树入门解题报告
---恢复内容开始--- 题意:给定区间,每个人的成绩, Q次询问,求每次询问区间中的最大值 思路:构造线段树 代码: #include<stdio.h> #include<algo ...
- HDU - 1754 线段树-单点修改+询问区间最大值
这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以. 注意更新的时候区间的选择,需要对区间进行二分. #include<iostr ...
- hdu 1754 线段树(单点替换 区间最值)
Sample Input5 61 2 3 4 5Q 1 5 //1-5结点的最大值U 3 6 //将点3的数值换成6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output5659 # i ...
- HDU 1754线段树基本操作,建树,更新,查询
代码线段树入门整理中有介绍. #include<cstdio> #include<algorithm> #include<cstring> #include< ...
- hdu 1754 线段树模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 #include <cstdio> #include <cmath> # ...
随机推荐
- 安装Android Studio遇到的问题
1. 学习视频 视频链接:https://www.bilibili.com/video/BV1jW411375J?p=2 2. Android Studio1.5.1的下载地址: http://www ...
- fastjsion反序列化漏洞渗透测试笔记
本文原创地址:https://www.cnblogs.com/yunmuq/p/14268028.html 一.背景 fastjsion是阿里的开源Java工具:https://github.com/ ...
- Mac M1原生(ARM64)Golang dev&debug
前言 通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题. Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构 ...
- Spring源码深度解析之事务
Spring源码深度解析之事务 目录 一.JDBC方式下的事务使用示例 (1)创建数据表结构 (2)创建对应数据表的PO (3)创建表和实体之间的映射 (4)创建数据操作接口 (5)创建数据操作接口实 ...
- CPNDet:粗暴地给CenterNet加入two-stage精调,更快更强 | ECCV 2020
本文为CenterNet作者发表的,论文提出anchor-free/two-stage目标检测算法CPN,使用关键点提取候选框再使用两阶段分类器进行预测.论文整体思路很简单,但CPN的准确率和推理速度 ...
- SGA: allocation forcing component growth分析
1.问题现象 20年12月31日,数据库应用人员反映2020-12-31 12:40:10存在告警,过了几分钟之后业务恢复正常. 表现的状态:Connect to database time out, ...
- SAP中的事务锁
我们知道sap中的事物锁tcode是SM01. 细细研究发现,其实无外乎就是将tstc表中的事务码对应的字段CINFO的值加上HEX20 解锁就是还原成原来的值. 当然也发现了,调用了一个系统函数AU ...
- 记录list.remove()和list.pop()
list.remove(obj):这个是移除列表中某个值的第一个匹配项 list.pop(index):这个是移除列表中下标为index的元素 当元素全是数字或者有数字时注意区分.
- 转 8 jmeter之集合点
8 jmeter之集合点 集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作 ...
- python元组 列表 (取值、替换、插入、添加、删除)
1.元组 列表 字典 元组( 元组是不可变的) hello = (1,2,3,4,5) type(hello)