小清新数据结构
1|0小清新数据结构
很小清新的数据结构题,主要是线段树和树状数组。
1|1CF840D Destiny
题意:求区间内是否存在出现次数严格大于
来自Alex_Wei老师的神仙思路:设
1|2CF1030F Putting Boxes Together
题意:单点修,求
思路:对于每个询问,首先肯定要找到使得答案最小的
1|3CF1114F Please, another Queries on Array?
题意:区间乘,求区间积的
思路:因为只有62个质数,因此可以用一个long long存下来区间内出现过的质数,然后维护区间乘、区间质数的标记就行了。
1|4CF1149C Tree Generator™
思路:神秘括号序列题
有一个结论,树上
而
我们考虑直接用线段树维护。对于每个节点,维护8个值,表示和、答案,左右端点开始的最大、最小前缀和、答案,就可以直接维护了。
1|5CF1373G Pawns
题意:
思路:设棋子
1|6CF1422F Boring Queries
题意:在线区间
自己的思路:按照区间
正解思路:有基于根号分治的做法(官方题解),也可以类似我的思路直接用主席树,不过空间是
1|7P3960 [NOIP2017 提高组] 列队
思路:来写列队了。
之前用平衡树写过一遍,至今还没调出来,于是决定写树状数组做法。
其实核心思路很简单,就是维护出最后一列,我们需要维护单点删和查第
1|8P4108 [HEOI2015] 公约数数列
题意:单点修,求最小的整数
思路:深感自己的弱小。
首先,本质不同的前缀
查询时,如果一个块内的前缀
1|9P4585 [FJOI2015] 火星商店问题
题意:求出在标号和时间的两维限制下的
思路:我会整体二分!
不如线段树套 01Trie。
1|10P4891 序列
题意:给出数组
思路:好像直接暴力修改,然后如果
好吧,暴力其实过不了。
正解就是势能分析,可以证明如果在线段树上暴力修改然后在整个区间可以一起修改时就打tag的复杂度是对的。
需要维护区间答案、区间
1|11P6240 好吃的题目
题意:区间 01 背包问题。
思路:区间 01 背包问题。
如果直接用线段树,那么每个询问需要
1|12CF938G Shortest Path Queries
题意:给出一个连通带权无向图,边有边权,要求支持
保证任意操作后当前状态下的图连通无重边自环且操作均合法
思路:线段树分治+线性基,关键点在于如果形成了环就将环的异或值加入线性基。
1|13CF992E Nastya and King-Shamans
题意:给定一个序列
思路:观察满足条件的数的个数。在不考虑
因此,我们就可以暴力来找可能满足条件的数,即不断地找区间内最大的满足
1|14CF633G Yash And Trees
题意:一棵树两种操作,第一种是某一节点子树所有值+v,第二种问子树中节点模m出现了多少种m以内的质数。
思路:CF少有的暴力题。
直接上线段树,每个节点维护长为
1|15P3793 由乃救爷爷
题意:
思路:首先考虑分块,块长为
怎么变成严格
1|16P8037 [COCI2015-2016#7] Prokletnik
题意:神仙题。
因为一共只有两种情况,于是可以先钦定左边是最小值,右边是最大值,然后反过来算一遍。
感觉不好做在线,考虑离线扫描线。假设当前考虑的右端点是
首先要找到
具体地,我们维护两个单调栈,一个用来维护每个位置左边第一个比它的大的位置,一个不降的单调栈来维护每个位置是否能被更新。每一个在单调栈中被
可以用树状数组实现。非常厉害。
一个树状数组维护不能再被更新的位置的最长满足条件的区间长度,另一个维护当前单调栈中一段前缀中的点作为左端点的满足条件的区间的最大右端点。
1|17CF1379F1 Chess Strikes Back (easy version)
题意:给出一个
思路:很好玩的题目。
把每
对于一个小矩阵,有 4 种情况:
- 没有限制
- 只有右下角能放
- 只有左上角能放
- 左上角右下角能放
这时无解的充要条件是 存在一个只有左上角能放的点在只有右下角能放的点的右下部分。
于是可以对行建立线段树,维护最左侧的只有右下角可以放的点和最右侧的只有左上角可以放的点,这样就可以判断了。
1|18CF1401F Reverse and Swap
给您一个长度为
把 修改为 ; 对于每一个 ,把区间 的元素翻转; 对于每一个 ,交换区间 和 的所有元素; 输出区间 中所有元素的和。
思路:显然可以想到建线段树。
对于 2,3 操作,我们要操作的恰好是第
1|19CF1787G Colorful Tree Again
题意:给定一棵有
一条简单路径指图中没有重复节点的路径。简单路径的长度定义为路径上所有边的边权之和。
定义一条简单路径是好的,当且仅当路径仅有某一种颜色
你需要处理两种操作:
- 摧毁一个节点;
- 修复一个节点。
每个操作之后,你都需要输出最长的好的路径长度。
思路:引入一个叫 bdfs 序的东西。
bdfs 序就是先加入根节点,然后加入所有儿子,这样可以保证儿子的编号连续,以及子树中除了根节点编号连续。
首先,判断一个颜色是否合法比较容易,而且和后面的做法关系不大,可以先处理好。
接着我们相当于是要试试维护一种颜色还剩的点数,而且最好是和点直接联系,那么根据 bdfs 序的性质,我们可以把和父亲边颜色一样的边放一起,即对颜色重标号,使得要么和父亲边的标号一样,要么就是连续的区间,这样我们要做的就是区间修改和查最大值等于 0 的位置的最大权值,可以用线段树维护。
1|20CF1797E Li Hua and Array
题意:给定一个长度为
有 o l r
,
时, , 时,找出使 的最小变化。在每次变化中,选择一个 。修改独立。
对于每个操作
思路:把一个数不断求
对于删掉末位的操作,可以用并查集维护每个位置下一个非 1 位置,然后暴力修改。
对于查询操作,可以看成是静态的,于是先预处理出
1|21P2056 [ZJOI2007] 捉迷藏
题意:树上每个点有颜色 0/1,每次反转一个点的状态,求颜色为 1 的点之间的最大距离。
思路:括号序列!
把一棵树的括号序列求出来后,我们发现两点的距离就是这两点间的括号串去掉匹配后剩下的括号数。
于是就可以用线段树维护,每个节点维护当前区间的答案,左括号数,右括号数,前后缀最大的左右括号数量差、数量和,就可以合并了。
1|22P7735 [NOI2021] 轻重边
题意:给一棵树,每条边可能是轻边或者是重边,有两种操作,一是把与一条路径上的点相连的路径变为轻边,然后把路径上的边变成重边,二是查询一条路径上有多少条重边。
思路:直接做很难,考虑怎么转化成更好做的形式。我们考虑把第一种操作变成给点染色,每一次操作就染成新的颜色,那么一条边两端颜色相同就是重边,否则就是轻边。
这个就可以直接用树剖维护了,相当于是在线段树上维护相同颜色连续段数及长度。不过在查询时合并处细节较多。
复杂度
1|23P8339 [AHOI2022] 钥匙
题意:有一棵树,每个点上有一个钥匙或者一个宝箱,都有颜色,每次询问给出一条路径,求出遍历这条路径时,遇到钥匙就拿着,遇到宝箱如果有对应颜色的钥匙就打开宝箱,同时钥匙会损坏,最后打开的宝箱个数。
思路:首先,暴力可以直接用栈来维护。
考虑特殊性质 A,可以发现一对钥匙和宝箱会对所有经过它的路径做贡献,相当于是在 dfn 序上的一个矩形加,可以离线扫描线解决。
正解就是在特殊性质的基础上,考虑每一个钥匙,它能匹配的宝箱其实并不多,往每个方向至多只有一个,那么可以把这个颜色对应的虚树建出来,然后对于每个钥匙,以它问根 DFS 一遍,然后就可以求出这一对的贡献对应的矩形,最后做一个二维数点即可。
1|24P6845 [CEOI2019] Dynamic Diameter
题意:带边权修改的树的直径。
思路:设
考虑在欧拉序上维护。根据欧拉序的性质,两点间的
这个东西看起来就和最大子段和类似,考虑用线段树维护。每个节点维护最大最小值,答案和前后缀能对答案做的最大贡献即可。
1|25P4747 [CERC2017] Intrinsic Interval
题意:定义一个区间是合法的当且仅当排序后是连续正整数,多次询问包含一个区间的最短合法区间是哪个区间。
思路:没发现关键性质,然后看析合树没看懂。
关键性质就是对于每个询问区间,右端点最小的合法区间就是最小区间。
证明很简单,根据值域连续段的性质,如果存在另一个区间满足右端点更大但是长度最小,那么这个两个区间的交也是合法区间,而答案就应该是这个区间交。
于是离线扫描线,然后把合法询问按左端点降序考虑能否找到满足条件的区间,可以用线段树二分来实现。
1|26P8528 [Ynoi2003] 铃原露露
题意:给定一棵有根树,顶点编号为
共
思路:小清新 ynoi。
合法区间不好判断,但是我们容易判断不合法区间。具体地,假设有两个位置
因为和 LCA 相关,考虑 dsu on tree,那么对于一个点
复杂度
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18015276.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探