随笔分类 - 数据结构-线段树
摘要:[NOI2016]区间(线段树+尺取法) 题面 在数轴上有n个闭区间 。现在要从中选出 m个区间,使得这m个区间共同包含至少一个位置.对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。求所有合法方案中最小的花费。如果不存在合法的方案,输出-1 。 分析 看到长度最大最小
阅读全文
摘要:RELATIVNOST (线段树优化DP) 题面 现在有n个人要买你的画,第i个人最多买ai个彩色的画,bi个黑白的画,你现在想要至少有c个人买了彩色的画,接下来有q个修改,每次修改某个人的ai和bi。问你每次修改之后有多少种情况可以满足你的要求。 分析 由于很小,不妨补集转化,设$f_{i,
阅读全文
摘要:动态DP学习笔记 约定: 若无特别说明,数组下标从1开始. 若无特别说明,矩阵的下标从0开始(这是为了和代码一致,而代码这样实现是为了节省内存) 在公式中,矩阵用粗斜体表示,如 若无特别说明,对于有根树上的结点,表示它儿子的集合,表示它的重儿子 对
阅读全文
摘要:[NOIP2018]保卫王国(动态DP) 题面 给出一棵树,有m组询问,每次询问给出两个点,规定他们必须选或必须不选。求树的最小权覆盖集。 分析 此题有倍增+树形dp的做法,常数非常优秀,但思路比较难想到。 显然 最小权覆盖集=总点权和 最大权独立集 看到最大权独立集,我们想到板子题 "[Luogu
阅读全文
摘要:[LuoguP6144][USACO20FEB]Help Yourself P(DP+组合数学+线段树) 题面 Bessie 现在有 N条在一条数轴上的线段,第 i条线段覆盖了 的所有实数。定义一个线段集合的并为所有至少被一条线段覆盖的实数。定义一个线段集合的复杂度为该集合
阅读全文
摘要:[SPOJ2666][ZJOI2007]捉迷藏Query on a tree IV(树链剖分)(论文做法) 题面 实际上,捉迷藏是Query on a tree IV的简化版。但区别只是捉迷藏的边权全部为1.这里把两个题合并起来写。 给定一棵包含 N 个结点的树,每个节点要么是黑色(亮灯),要么是白
阅读全文
摘要:[Codeforces1037H]Security(SAM+线段树合并) 题面 分析 CF什么时候也开始出这种套路题了 和[NOI2018]你的名字几乎一模一样,看到区间串问题,用线段树维护right集合,每次沿着转移边走的时候要判断一下转移到的节点的right集合中是否有在内的值.
阅读全文
摘要:[NOI2018]你的名字(后缀自动机+线段树合并) 题面 给出一个字符串,有组询问,每次询问给出一个字符串和整数.问能从中选出多少个本质不同的子串,满足这个子串在的区间没有出现过。 $|S| \leq 5 \times 10^5,q \leq
阅读全文
摘要:[LuoguP4094] [HEOI2016] [TJOI2016]字符串(二分答案+后缀数组+ST表+主席树) 题面 给出一个长度为的字符串,以及组询问.每个询问是一个四元组,问的所有子串和字符串的最长公共前缀长度的最大值。
阅读全文
摘要:[Codeforces 1295E]Permutation Separation(线段树+贪心) 题面 给出一个排列.初始时你需要选择一个位置把排列分成左右两个。然后在两个序列间移动元素使得左边序列的所有元素都比右边的所有元素小。给出每个元素从一个序列移动到
阅读全文
摘要:[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为的序列,个操作 1. 区间赋值为 2. 查询 $n,m \leq 10^
阅读全文
摘要:[BZOJ 3123] [SDOI 2013]森林(可持久化线段树+启发式合并) 题面 给出一个n个节点m条边的森林,每个节点都有一个权值。有两种操作: 1. Q x y k查询点x到点y路径上所有的权值中,第k小的权值是多少。此操作保证点x和点y连通,同时这两个节点的路径上至少有k个点。 2. L
阅读全文
摘要:[APIO2019] [LOJ 3146] 路灯 (cdq分治或树状数组套线段树) 题面 略 分析 首先把一组询问(x,y)看成二维平面上的一个点,我们想办法用数据结构维护这个二维平面(注意根据题意这里的y要 1,这样问题变成[x,y]区间是否是由连续的一段1组成) 如果我们改变第x个灯的状态,那么
阅读全文
摘要:[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x y|+|a[x] a[y]|。 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k。 2.Que
阅读全文
摘要:[BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并) 题面 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. ,颜色编号 $
阅读全文
摘要:[HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同。接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子。操作完之后有q个询问,询问新树上两点之间的距离 分
阅读全文
摘要:[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次都对整个序列求逆序对显然不行,考虑每次删除对逆序对个数的影响 假如删除的数为x,x在序列中的位置为p
阅读全文
摘要:[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合。 1 a b c :在a b的每个集合中插入一个数c 2 a b c :2:询问将a b的每个集合合并
阅读全文
摘要:[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把修改成y 2.区间修改,把序列中值v,则不下推(最小值 v,即所有数都 v,不用会产生修改),否则把区间中的最小值和v取max. 单点修改的时候先
阅读全文
摘要:[BZOJ3307] 雨天的尾巴(树上差分+线段树合并) 题面 给出一棵N个点的树,M次操作在链上加上某一种类别的物品,完成所有操作后,要求询问每个点上最多物品的类型。 N, M≤100000 分析 考虑树上差分。对于每条链(x,y),我们在x,y打一个+标记,lca(x,y)和lca(x,y)的父
阅读全文