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

时间: 2024-10-01 07:24:27

2018年6月1号(线段树(1))的相关文章

2018年5月31号(树状数组)

今天,老师讲了树状数组,本蒟蒻有点懵懵懂懂,但是基本模板我还是记到的: 先是讲下原理: 今晚学了树状数组…所以呢我来总结一下自己对它的理解…    这图是在网上随便找找的…  由图可以得出:  c1=a1;  c2=c2+c1=a1+a2;  c3=a3;  c4=c4+c3+c2=a1+a2+a3+a4;  c5=a5;  c6=c6+c5=a5+a6;  c7=a7;  c8=c8+c7+c6+c4=a1+a2+a3+a4+a5+a6+a7+a8; 前k项和:  s1=c1=a1;  s2=

【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户

作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先要明确的是:1)这个漏洞不是去年说的Intel ME的漏洞:2)这个漏洞不是很多答主说的依靠时间推测内核加载地址的问题. 这是一个新爆出的漏洞,虽然看起来不是1月2号才暴露出来.因为Linux和Windows早在去年11月份左右就有动作开始修补了. 下面是科普时间: 首先我们需要知

2018 Arab Collegiate Programming Contest (ACPC 2018) G. Greatest Chicken Dish (线段树+GCD)

题目链接:https://codeforces.com/gym/101991/problem/G 题意:给出 n 个数,q 次询问区间[ li,ri ]之间有多少个 GCD = di 的连续子区间. 题解:类似HDU 5726,可以先看一下这个blog:https://blog.csdn.net/u013569304/article/details/51987053 考虑离线,先预处理出[ 1,n ]之间所有的GCD,同时需要记录每种 GCD 的区间,方法是固定一个右端点R,对于区间[ L,R

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

今天想和大家一起了解下今天我刚写的一道题: P1558 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L.现在色板上只有一个颜色,老师告诉阿宝在色板上只能做两件事:1. "C A B C" 指在A到 B 号方格中涂上颜色 C.2. "P A B" 指老师的提问:A到 B号方格中有几种颜色.学校的颜料盒中一共有 T 种颜料.

2018年11月17号第一次参加源创会记录

前言 昨天下午,到网易大厦参加了源创会的微信小程序技术沙龙.之前也参加过一些技术沙龙,但是原创会的还是第一次,总体感觉,还是很不错的. 细雨纷飞,准时来到会场之后,竟然发觉早已经人满为患,后边陆续还有不少参会者进场,后来的人就只能够站着听了. 主题 一共有四个主题,基本都与微信小程序和前端开发相关的.其实我也不知道为什么选题主要都和小程序或者前端相关,也许可能微信总部在广州吧,又或者广州这个城市比较着重商贸,所以微商或者搞前端这些讲求快捷实用的小公司更多吧.毕竟大部份的科技巨头都集中在北京上海深

2018年3月7号 认识html

<!doctype html>(声明为 HTML5 文档)<html>(标签限定了文档的开始点和结束点)<head>(带有最基本的必需的元素.定义文档的头部)<meta charset="utf-8">(规定 HTML 文档的字符编码:)<title>无标题文档</title>(标题)</head><body> (包含了可见的页面内容.定义文档的身子)</body></ht

2018年3月12号 学习内容

选择器: 标签选择器:根据标签名找 id选择器:根据id的属性值来找元素 #id的属性值 class选择器:根据class的属性值来找元素 .class的属性值 并列 关键符号(,)形式:选择器1(,)选择器2{} 后代  关键符号(空格)形式:父选择器(空格)子选择器 css层叠样式表 用来美化页面 css分类: 1. 内联(行内):写在标签里面 以属性的形式 属性名是style 注:不推荐但是优先级最高 2.内嵌: 写在head标签内 以标签的的形式表现 标签名是link <link rel

2018年3月13号

float:浮动 clear:both 消除浮动 要浮动的标签用div包起来 给div设宽高 设行高 设行高垂直居中: #div{ width:100%; height:30px; link-height:30px;// 行高 默认垂直居中 (这里的高要跟设的高一个样) } link-height:最好对一行使用 如果换行了 标签的高度就变了 兼容:将最外层的标签设宽高 里面用百分比 盒子模型: 从内到外,内容,内边距(填充物),边框,外边距(和别的物品的距离) html        padd

2018年3月23号 Dom操作

Dom操作 dom操作:找到元素 操作元素          找元素(标签对象)                   标签名                       document.getElementsByTagName();                   属性                       document.getElementById();    id属性值                       document.getElementsByName();