线段树
Rainbow6174
这个作者很懒,什么都没留下…
展开
-
NOI 2015 软件包管理器 题解&代码
简单的树链剖分= =不过第一次写真正意义上的树剖坑了我整整五个小时…写出来的代码也不算模板级别的思路,模板还得再找几道题习惯习惯再整理 **对了= =才没有抄过模板呢…在下的模板都是自己根据写法和记忆的难易自己整理出来的**调了两天,题目已经忘了,等我去整理一下 给出了一颗以0为根节点的Bool类型树,对于一个节点x有两个操作: 1、将该节点到根节点的路径上所有节点值都修改为1 2、将以该节原创 2015-12-11 17:43:33 · 818 阅读 · 0 评论 -
BZOJ4034 [HAOI2015]T2 题解&代码
题意: 有一棵有N个节点的树,以节点1为根,且点上有权。 有M个操作,分为三种: 操作 1 把节点x的点权增加 a 操作 2 把以节点x为根的树中所有点的点权都增加a 操作 3 求节点x到根的路径中所有点的点权和分析: 操作1和操作2本质上是没有区别的,区间修改和单点修改显然可以合并,求dfs序后线段树区间维护就可以了 操作3是涉及路径的查询,和树剖很类似,但是比树剖简单很多【比如我求的原创 2016-06-01 21:32:05 · 1347 阅读 · 0 评论 -
BZOJ2243 [SDOI2011]染色 题解&代码
题意: 给定一棵有n个节点的树和m个操作,操作有: C a b c 将树上a到b路径上所有点都染成颜色c; Q a b 询问树上a到b路径上的颜色段数量(连续相同颜色是同一段) 思路: 树上的路径!树链剖分! 可惜智障了…没想到怎么维护颜色段【妈的这么简单的维护当时居然不会 树剖划分一下树,然后线段树维护每一段的最左lc[]最右rc[]和不同颜色色段数量和sum[],查询的时候关于判断原创 2016-04-14 17:26:29 · 2994 阅读 · 0 评论 -
POJ3468 A Simple Problem with Integers 题解&代码
题意:给出n个数排成一列,有q个操作,分为Q和C,Q操作[l,r]询问区间[l,r]的区间和,C操作[l,r]对[l,r]区间同时增加x,按题意输出就行了 题解:线段树,主要是好久没写又错了好长一段时间…万年LL我就不多说了,看错范围觉得sum[]不需要LL,另外重点是query和insert不可能越界访问,所以就算区间对于这组数据是无效区间,只要访问到对应区间也一定要pushdown…忘了结果纠原创 2016-04-05 10:48:18 · 519 阅读 · 0 评论 -
Codeforces 343D Water Tree 题解&代码
其实是树剖QwQ不过个人感觉和线段树还是很像的…所以树剖的本质大约就是dfs序+线段树?in[]记录节点的节点的dfs编号 out[]记录节点的控制范围 (in[i]<=in[j]<=out[i]当且仅当j节点属于以i为根节点的子树) pos[i]记录i节点的父亲节点 这样就能用[1,n]表示一颗以1为根节点的树了1、每次要给i节点加水的时候就把[in[i],out[i]]的值修改为1,用l原创 2015-12-09 17:48:12 · 642 阅读 · 0 评论 -
POJ1151 HDU1542 CODEVS3044 Atlantis 题解&代码
矩形面积求并 思路:离散化之后按x轴or按y轴刷扫描线,用线段树来表示区间范围。**被POJ的%.2f输出坑了一个多小时的我并没有心情仔细写题解,有机会再补吧#include<iostream>#include<algorithm>#include<stdio.h>#include<map>#define lson (o<<1)#define rson ((o<<1)|1)using原创 2015-12-04 20:13:37 · 875 阅读 · 0 评论 -
HDU 2665 Kth number 题解&代码
嘛…作为一道主席树模板题我TLE RE MLE占全然后卡到998ms过也是蛮拼的【事后删了一个无用的memset然后904ms卡过去了…好歹不那么危险了 其实这题是划分树= =毕竟静态查询…主席树肯定慢,加上姿势问题…想不T也挺艰辛的 和BZOJ 3207并没有什么卵区别,甚至少了hash过程= = 建n个线段树,查询第s-1到第t个树的size大小,和k比较即可#include<iostre原创 2015-12-21 21:28:27 · 665 阅读 · 0 评论 -
BZOJ 1012 [JSOI2008] 最大数 maxnumber 题解&代码
题目简洁明了= =我就不详细说了,线段树最大值裸题维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾原创 2015-12-03 19:18:07 · 647 阅读 · 0 评论 -
POJ 2828 Buy Tickets 题解&代码
题目大意:对于每组数据,给出一个空队列,有m次插入,每次插入都将在队列的第pos[i]处插入一个值val[i],输出队列最后的状态。 思路: 在第pos[i]处插入一个元素,则第pos[i]处后的所有元素都将向后移动一位,看起来是平均每次插入需要n次操作。 但是我们可以看出,对每次插入来说,本次插入结束后本次所插入的元素位置一定会是pos[i]+1,那么与其先插入可能会需要向后移动的元素,不如原创 2015-12-03 19:43:40 · 711 阅读 · 1 评论 -
HDU 1698 Just a Hook 题解&代码
题目要求是对于一个初始值均为1的区间进行区间修改,修改目标为:[a,b]区间内的值被修改为c 对于多组数据的每组数据输出q次修改后的全区间和 基本线段树了…只有两个元素需要维护:sum和add,sum表示该点的元素 坑点在于多组数据= =要不是某人前(jie)车(wo)之(dai)鉴(ma)我二十分钟肯定调不过,尽管如此也WA了四次= =总之,时刻记住这是多组数据就很简单了#include<i原创 2015-12-01 20:52:55 · 545 阅读 · 0 评论 -
Codeforces 383C Propagating tree 题解&代码
题意: 给出一个以1为根节点的n个节点的树,有两个操作: 1、操作为1 x val,给x节点增加val 2、操作为2 x,查询x节点当前的值 每次给一个节点的值增加val,这个节点的孩子的值将会增加-val 如此,给一个节点增加val就相当于它的子节点增加-val,它的子节点的子节点增加val…如此直到叶子节点思路: 每次都是给修改节点子树中与修改节点深度奇偶性相同的节点增加val,给与原创 2015-12-15 17:12:26 · 483 阅读 · 0 评论 -
BZOJ 3207 花神的嘲讽计划Ⅰ 题解&代码
题意: 给出n个数,形成一个长度为n的序列(可以看做[1,n]的区间) 有m组询问,对于每组询问给出一个x和一个y,然后给出一个长度为k的序列s。如果在区间[x,y]上,存在至少一个序列和序列s完全匹配,那么输出No,否则输出Yes。 **注意,匹配成功了输出No,失败时才会输出Yes思路:嘛…就是把每k个数字hash一下存进可持久化线段树的对应位置,这样得到了n-k+1个线段树的根节点,分别原创 2015-12-14 18:22:40 · 776 阅读 · 1 评论 -
POJ2104 K-th Number 题解&代码
你说什么?和HDU题目一样?不不不这才不是多组数据= = 其实重点在于我终于知道为什么我一直TLE了…map被卡了那个萌萌哒logn 所谓STL一时爽全家火葬场,改了数组记录之后过得轻轻松松 代码如下【一会去把hdu的排序也改一下重交试试#include<iostream>#include<algorithm>#include<map>#include<string.h>#includ原创 2015-12-21 21:43:49 · 1959 阅读 · 2 评论