线段树
QAQwdd
这个作者很懒,什么都没留下…
展开
-
有关区间的一类问题(以CF438D,CF920F为例)
关于区间修改与查询,有这样一类问题:区间取模,开根号等等。 这一类问题的特点是:每次修改之后,该区间的值都会大幅减小,最后变成某一定值。 以取模操作为例:每次操作后值都会至少减小一半,至多进行log2次操作。 证明:设原数为a,模数为b。若a < b,此时不需要进行操作。当a > b时:若b > a/2,则最终数为a-b < a/2;若b <=原创 2018-07-31 12:08:31 · 333 阅读 · 0 评论 -
HAOI2015 树上操作 DFS序+线段树
题目大意:给定一棵树,每个点有点权。有m个操作:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。定睛一看,这不就是树链剖分的模板题吗?!连问题都是一样的。。。(树链剖分模板)不过因为我写的不熟,只能大力线段树。。。思路:首先把树的DFS序求出来,这样就把树上...原创 2018-07-31 11:50:36 · 483 阅读 · 0 评论 -
Luogu P3919 【模板】可持久化数组 可持久化线段树/平衡树
可持久化数据结构我是一直想写的,今天终于找到机会了。 题目大意:维护一个长度为N的数组,支持单点修改,单点查询历史版本。思路: 可持久化线段树:每次修改时,新建一个版本的线段树,询问时找到该版本线段树并查询。可每次新建一颗线段树代价太高,于是我们可以考虑每次只新建一部分节点。空间复杂度O(n * 2 + qlogn),时间复杂度O(nlogn + qlogn)。具体实现: ...原创 2018-08-03 15:37:05 · 249 阅读 · 0 评论 -
CF914D Bash and a Tough Math Puzzle 线段树
发了多少篇线段树题解了。。。题意:维护一个数列,支持单点修改,询问区间是否能改掉一个数,使该区间的gcd是x的倍数。 题解:线段树维护区间gcd询问一个块时分为左右两块,若两个块都不需要修改,则该区间不需要修改;若只有一个块需要修改,则该区间只有一个数字需要修改;若其中一个块需要修改两次以上,则该区间也不能满足要求。单点时总能修改#include<cstdio>...原创 2018-08-16 19:25:59 · 297 阅读 · 0 评论 -
NOI2016 区间 线段树+离散化
传送门好久没水线段树题了。。。NOI2016的签到题,差不多就是个裸的线段树。 离散化,建树,维护最大值。 然后区间以长度排序,从小到大加入线段,若覆盖次数达到m就更新答案,同时删除最左边的区间,并更新答案(因为有些区间不覆盖那个已经覆盖m次的点),就完了。 好像某个最小差值生成树(雾#include<cstdio>#include<algorit原创 2018-08-26 21:29:30 · 415 阅读 · 0 评论 -
CF474F Ant colony 线段树
传送门又TM水了一道线段树…题意:求区间GCD及等于这个GCD的数有多少个。输出区间长度-GCD数量 题解: 线段树维护区间GCD,再维护区间GCD数量。 显然当两个区间合并时,新区间的GCD等于左右区间GCD的GCD,而如果等于其中一个数,则数量就等于那个区间的GCD数量。 然后就完了。#include<cstdio>#include<algorithm&...原创 2018-08-27 19:47:00 · 323 阅读 · 0 评论 -
HNOI2005 虚拟内存 线段树+Hash
传送门 题目大意:模拟一个内存系统。 题解:大力Hash+线段树。 Hash记录元素是否存在,线段树寻找访问次数最少的页码。 用指针板线段树卡了卡常,居然混到BZOJ的rank1了OvO#include<cstdio>#include<cstring>#include<algorithm>using namesp原创 2018-08-31 09:30:32 · 212 阅读 · 0 评论 -
SHOI2008 堵塞的交通 线段树
传送门这是一道让人误解为水题的线段树题。题意:维护2*n的网格区域中点的连通性。 题解:线段树维护连通性。把上下两个城市看作线段树中的一个点 合并两个区间时,只看这两个区间的左,右端点,更新合并区间的连通性。这个很好想,不过实现起来…嘿嘿嘿 记录横向的线段,用于合并时判断。由于修改都是单条路修改,记录起来也不太难。 总之就是要多画图,把两点连通性的所有情况给画出来。 可以...原创 2018-08-28 18:46:01 · 254 阅读 · 0 评论 -
NOIP2017 列队
传送门鸽了一年测试点1-6:二维数组模拟。测试点7-10:把所有询问到的行离散化。测试点11-16:发现所有事件x等于1,那么每次出队,入队只会对第一行和最后一列造成影响。相当于把最后一列压到第一行,这样就相当于维护一个序列,每次找出第x个元素并放在队尾。可以用线段树维护这个序列,每个节点维护的是当前区间长度,l=r时还存了这个人的编号,当出队的时候就找到第y个人,把这段区间长度设为0,再...原创 2018-11-06 21:49:37 · 566 阅读 · 0 评论