今天是六一儿童节,先祝各位六一儿童节快乐

  今天想和大家一起学习一下线段树:
  
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))相关推荐

  1. Java随笔(2017年10月23号~2018年4月7号)

    2017年10月23号 1.java:94年改名,95年推出 2.java特性:安全性.可移植性和平台无关性 3.java(jdk)中的bin目录中的.exe结尾的都是运行程序存放可执行文件: lib ...

  2. MF_RC522_射频识别参考程序注释(2018年4月27号)

    MF_RC522_射频识别参考程序注释(2018年4月27号) https://wenku.baidu.com/view/478e6bb17f1922791688e8f8.html

  3. 2017年计算机组成原理1254,2018年7月试卷号1254计算机组成原理A.pdf

    2018年7月试卷号1254计算机组成原理A 试卷代号:1254 座位号!I I 国家开放大学(中央广播电视大学)2018 年春季学期"开放本科"期末考试 计算机组成原理试题 20 ...

  4. 2018年6月2号(线段树(2))

    昨天只是普通的线段树(简单的单点修改) 而今天将讲是比较普通的简单的区间修改(加法修改): 我主要是复制代码的蒟蒻我只能依靠模板为生,所以我想特地练下手: 1 #include<bits/std ...

  5. 2018年6月3号(线段树(3))

    今天想分享一下一道题的心得: P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的 ...

  6. 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 ...

  7. php5.23升级,2018年5月5号23:30分对php的学后感

    学后感: 自从3月15号来到php中文网这个平台学习以后,经过一个半月多一点的学习,在3月15号之前我是一个对前段有点点了解html和css的小白,甚至说什么都不懂的情况下,在这一个都学的学习中,从学 ...

  8. [集训队作业2018] 万圣节的积木(李超线段树)

    传送门 设最底层为第1层,倒数第二层为第2层,以此类推. 发现若第111 ~ iii层构成的积木稳定,第111 ~ jjj (j>ij>ij>i)构成的积木也稳定, 那么第i+1i+ ...

  9. 2018年9月28号-10月9号

    来了加拿大差不多一个月了,晚上突然特别有感触,于是写点东西吧. 这一个月过得真的挺快,找了房子,然后开始每周去学校做实验室的日子.开始正常上课,然后看文章,准备演讲.这次的演讲说是准备的辛苦,其实发现 ...

最新文章

  1. word2vec 中的数学原理详解
  2. 地铁闸门会夹伤人吗_男子被夹地铁屏蔽门与列车之间,现场画面太惊险!
  3. Crawler:基于requests库+urllib3库+伪装浏览器实现爬取抖音账号的信息数据
  4. PHP面试题:使用PHP描述快速排序算法,对象可以是一个数组?
  5. android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)
  6. 沉浸文化获星瀚资本百万元级种子轮投资,星瀚资本投资
  7. 设计灵感|时尚潮流品牌如何通过网页设计呈现
  8. UI设计干货素材|滑动动效设计模板
  9. jmeter插件下载
  10. 姿态坐标c语言,判断 AR 中坐标系的姿态和位置的简单方法
  11. 热烈祝贺:关于OpenJDK8 LINUX版本输入法候选框不能跟随光标移动的BUG及解决办法,已上报Oracle
  12. c# 扩展方法奇思妙用高级篇三:Enumerable.CastT 应用
  13. 数学第一单元计算机思维导图,七年级下册数学第一单元思维导图
  14. html5给文字添加拼音,word怎么为文字添加拼音
  15. 小米电视换鸿蒙,DIY 篇一:迟来的小米电视主机改造,完美增加红外接收(红外遥控)...
  16. 手机卸载不了刷机精灵
  17. windows7下安装sharex视频截图报错,需要下载ffmpeg——Unknown input or output format: gdigrab
  18. Silverlight的未来[译文]
  19. scrapy爬取苏宁所有图书
  20. 依据机械特性选取合适的电机系统

热门文章

  1. EclipseIDE常用快捷键
  2. 获取一个APK的版本号
  3. [导入]七大千年数学难题
  4. curl error code 60 51 代码解决方式
  5. windows-sock-简单例子-转
  6. Spring源码学习笔记:经典设计模式之代理模式
  7. LeetCode 504. Base 7
  8. LeetCode 515. Find Largest Value in Each Tree Row
  9. 【算法】动态规划笔记
  10. 都是成年人了,别再相信OA价格越低越好这种话了