2018年6月1号(线段树(1))
今天是六一儿童节,先祝各位六一儿童节快乐
今天想和大家一起学习一下线段树:
1. 创建线段树
对于线段树我们可以选择和普通二叉树一样的链式结构。我们可以用数组来存储,下面的讨论及代码都是数组来存储线段树,节点结构如下(注意到用数组存储时,有效空间为2n-1,实
际空间确不止这么多,比如上面的线段树中叶子节点1、3虽然没有左右子树,但是的确占用了数组空间,实际空间是满二叉树的节点数目。 是树的高度,但是这个空间复杂度也是
O(n) 的 )。
定义包含n个节点的线段树 SegTreeNode segTree[n],segTree[0]表示根节点。那么对于节点segTree[i],它的左孩子是segTree[2*i+1],右孩子是segTree[2*i+2]。
我们可以从根节点开始,平分区间,递归的创建线段树,线段树的创建函数如下:
1 int add(int x,int l,int r) 2 { 3 s[x].l=l;s[x].r=r; 4 int mid=(l+r)/2;//利用二分的思想来做; 5 if(l==r) 6 return s[x].dis=a[l]; 7 s[x].dis=add(x*2,l,mid)+add(x*2+1,mid+1,r);//这只是求和; 8 return s[x].dis; 9 }
2.修改
我么就以一个最常见的例子来说
最经常的是“C,x,y”,把a[x]改成v;
代码:
1 void chag(int p,int x,int v) 2 { 3 if(t[p].l==t[p].r) 4 { 5 t[p].dat+=v; 6 return; 7 } 8 int mid=(t[p].l+t[p].r)/2; 9 if(mid>=x) 10 chag(p*2,x,v); 11 else 12 chag(p*2+1,x,v); 13 t[p].dat=t[2*p].dat+t[2*p+1].dat; 14 }
最后求了,我给出一个求和代码
代码:
1 int asked(int p,int l,int r) 2 { 3 if(l<=t[p].l&&r>=t[p].r) 4 return t[p].dat; 5 int mid=(t[p].l+t[p].r)/2; 6 int maxx=0; 7 if(l<=mid) 8 maxx+=asked(p*2,l,r); 9 if(r>mid) 10 maxx+=asked(p*2+1,l,r); 11 return maxx; 12 }
today is over
转载于:https://www.cnblogs.com/zssmg/p/9123473.html
2018年6月1号(线段树(1))相关推荐
- Java随笔(2017年10月23号~2018年4月7号)
2017年10月23号 1.java:94年改名,95年推出 2.java特性:安全性.可移植性和平台无关性 3.java(jdk)中的bin目录中的.exe结尾的都是运行程序存放可执行文件: lib ...
- MF_RC522_射频识别参考程序注释(2018年4月27号)
MF_RC522_射频识别参考程序注释(2018年4月27号) https://wenku.baidu.com/view/478e6bb17f1922791688e8f8.html
- 2017年计算机组成原理1254,2018年7月试卷号1254计算机组成原理A.pdf
2018年7月试卷号1254计算机组成原理A 试卷代号:1254 座位号!I I 国家开放大学(中央广播电视大学)2018 年春季学期"开放本科"期末考试 计算机组成原理试题 20 ...
- 2018年6月2号(线段树(2))
昨天只是普通的线段树(简单的单点修改) 而今天将讲是比较普通的简单的区间修改(加法修改): 我主要是复制代码的蒟蒻我只能依靠模板为生,所以我想特地练下手: 1 #include<bits/std ...
- 2018年6月3号(线段树(3))
今天想分享一下一道题的心得: P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的 ...
- 2018.06.28 与或(线段树)
#与或 描述 样例输入 5 8 1 3 2 5 4 3 1 3 2 1 1 5 3 1 3 1 1 4 6 2 3 4 1 3 2 3 2 2 3 4 3 1 5 **样例输出 ** 3 5 3 7 ...
- php5.23升级,2018年5月5号23:30分对php的学后感
学后感: 自从3月15号来到php中文网这个平台学习以后,经过一个半月多一点的学习,在3月15号之前我是一个对前段有点点了解html和css的小白,甚至说什么都不懂的情况下,在这一个都学的学习中,从学 ...
- [集训队作业2018] 万圣节的积木(李超线段树)
传送门 设最底层为第1层,倒数第二层为第2层,以此类推. 发现若第111 ~ iii层构成的积木稳定,第111 ~ jjj (j>ij>ij>i)构成的积木也稳定, 那么第i+1i+ ...
- 2018年9月28号-10月9号
来了加拿大差不多一个月了,晚上突然特别有感触,于是写点东西吧. 这一个月过得真的挺快,找了房子,然后开始每周去学校做实验室的日子.开始正常上课,然后看文章,准备演讲.这次的演讲说是准备的辛苦,其实发现 ...
最新文章
- word2vec 中的数学原理详解
- 地铁闸门会夹伤人吗_男子被夹地铁屏蔽门与列车之间,现场画面太惊险!
- Crawler:基于requests库+urllib3库+伪装浏览器实现爬取抖音账号的信息数据
- PHP面试题:使用PHP描述快速排序算法,对象可以是一个数组?
- android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)
- 沉浸文化获星瀚资本百万元级种子轮投资,星瀚资本投资
- 设计灵感|时尚潮流品牌如何通过网页设计呈现
- UI设计干货素材|滑动动效设计模板
- jmeter插件下载
- 姿态坐标c语言,判断 AR 中坐标系的姿态和位置的简单方法
- 热烈祝贺:关于OpenJDK8 LINUX版本输入法候选框不能跟随光标移动的BUG及解决办法,已上报Oracle
- c# 扩展方法奇思妙用高级篇三:Enumerable.CastT 应用
- 数学第一单元计算机思维导图,七年级下册数学第一单元思维导图
- html5给文字添加拼音,word怎么为文字添加拼音
- 小米电视换鸿蒙,DIY 篇一:迟来的小米电视主机改造,完美增加红外接收(红外遥控)...
- 手机卸载不了刷机精灵
- windows7下安装sharex视频截图报错,需要下载ffmpeg——Unknown input or output format: gdigrab
- Silverlight的未来[译文]
- scrapy爬取苏宁所有图书
- 依据机械特性选取合适的电机系统