
线段树
文章平均质量分 61
yqcr
这个作者很懒,什么都没留下…
展开
-
The 15th Chinese Northeast Collegiate Programming Contest D题
题目链接大致题意:给你一段含n个数字的序列,对于这段序列可以有m次操作。操作有两种类型:1、(1,L,R)表示将(L,R)区间的每个数加自身的lowbit值(若一个数为x,则其lowbit值为x&-x).2、(2,L,R)询问区间(L,R)数字之和思路:一眼看上去知道要用线段树维护区间信息,但对于操作1对区间每个数都需要加上其lowbit值,似乎直接用单点修改来做会T得很惨,但是仔细一想加的值很特殊是该数的lowbit的值,我们仔细一想便会发现一个数最多加logn次其lowbit值后继原创 2021-07-07 22:18:44 · 924 阅读 · 0 评论 -
可持久化线段树(主席树)相关模板题
一、可持久化数组:题目链接个人感觉可持久化数据结构的精髓就在于最大限度的使用以前的资源也就是最小的增加新的资源。对于这道题我们可以将原始数组用一个普通线段树来存,当我们需要修改的时候只需要将需要修改的元素在线段树中所在的链修改即可,其他的都可以使用原来的数据。借用别人的图分析一下:这是原始数据构成的线段树,一共有六个数据。假如我们需要在此基础上修改第二个元素:可以看出橙色部分即为我们需要修改的部分这就是修改了第二个元素以后的可持久化数组的样子,绿色为修改第二个节点后的线段树版本,在修改的原创 2021-06-29 17:46:35 · 259 阅读 · 0 评论 -
线段树(区间修改+区间求和)lazy标记版
无lazy标记版线段树lazy标记模板题lazy标记怎么说呢,就是如果要修改的区间是[1,4]就在线段树中暂时标记被区间[1,4]完全覆盖的节点而不去修改次节点以下的节点,如若[1,4]被标记,不会继续向下递归标记[1,4]的子节点[1,2],[3,4],使得时间复杂度减小到logn,但如果我们要查询【1,4】之后的节点怎么办呢,这个时候就要引入push-down操作。代码:void p...原创 2020-03-17 14:18:30 · 408 阅读 · 0 评论 -
线段树(单点查询+区间求和)无lazy标记
模板题出处原理就大概如图所示,线段树的每个节点都是原数组的一段区间和,而叶子节点就是原数组对应 的值建树代码:void build(int p,int lf,int rt){//建树 ans[p]=0; if(lf==rt) { ans[p]=A[lf]; return ; } int mid=(lf+rt)>>1; bu...原创 2020-03-17 12:18:41 · 1136 阅读 · 0 评论