![](https://img-blog.csdnimg.cn/20200731213713219.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 67
记录在学习数据结构过程中的感想以及重点知识,以及个人的一些项目分析记录
HeartFireY
可能是ACMer、JXNU计算机科学协会前会长
展开
-
[Ynoi2017] 由乃的 OJ 水题LCT
我们考虑每个点单独作为序列时的答案ans0,ans1,那么序列上树后我们需要考虑区间合并:假设带合并的两个答案分别为a,ba.ans0的 第k位为0,并且b.ans0的第k位为1或者a.ans0的第k位为1而且b.ans1的第k位为1,此时合并后ans0第k位仍为1。类似的可以推出ans1的合并条件。然后考虑序列上树,需要树剖来算答案。然后可以用LCT维护这个东西,但是发现makeRo。原创 2022-12-02 14:14:53 · 662 阅读 · 2 评论 -
CF104064 E. Exchange Students(NWERC2021)
如此一来,就避免的无意义的连续相等段内的交换(这些段的错误贡献实际上在逆序对统计时也没有统计到答案里(前提是要稳定排序否则会错),但是却会影响操作的构造)。来达到交换的效果,这个很好理解:题目要求如果要交换两个人的位置,中间的人的身高必须严格小于这两个人,因此合法的交换操作仅可能发生在距离最近的可交换点对之间。我们仍按照上述的策略来确定操作,但是我们很快会发现:每次操作我们都需要很快快的求得以下几个量:假设当前位置为。剩下的模拟上述过程即可。那么我们发现交换的首位的操作次数实际上就是求个逆序对即可。原创 2022-11-26 22:31:32 · 895 阅读 · 0 评论 -
ExtC++(PBDS) 食用方法
说明:大量内容参考OIWIKI。原创 2022-11-19 20:36:26 · 1179 阅读 · 0 评论 -
2022 CCPC 广州站 个人题解 B. Ayano and sequences
B. Ayano and sequences 扫描线 https://codeforces.com/gym/104053/problem/B。2022 CCPC 广州站 题解原创 2022-11-19 11:08:45 · 945 阅读 · 0 评论 -
[FHQ模板] P4008 [NOI2003] 文本编辑器
多加个数组维护一下最大值,多加个标记维护下区间加,然后没了。大傻逼题,用脚写都能过。原创 2022-11-15 22:51:53 · 438 阅读 · 0 评论 -
[FHQ模板] P3960 [NOIP2017 提高组] 列队
多加个数组维护一下最大值,多加个标记维护下区间加,然后没了。大傻逼题,用脚写都能过。原创 2022-11-15 22:46:55 · 404 阅读 · 0 评论 -
[平衡树刷题] 模板 P2042 [NOI2005] 维护数列
对于插入区间,分裂后硬插即可,但注意不要裂成俩之后再调用原始的插入,因为裂开之后root变了,插入操作是错的。不如直接建一棵新的平衡树插点,然后在裂开合并三段即可。对于最大子列和,用区间合并的思想求;对于区间翻转,用平衡树反转的思想求;很板的题,但是很有必要写。注意下放标记的顺序。原创 2022-11-15 12:37:49 · 367 阅读 · 0 评论 -
[小刷平衡树] P3391 【模板】文艺平衡树
存个板子,开搞。原创 2022-11-14 08:13:42 · 390 阅读 · 0 评论 -
SGT替罪羊树模板
对于删除操作,替罪羊树的删除操作很好的体现了Lazy思想。它在删除节点时,并不是真正的删除,而是将其标记。此后所有的操作都将其无视,重构就直接丢弃,除非有插入操作将其恢复。如果被标记的节点数超过了整棵树大小的一半,我们就直接将整棵树重构,同时清除删除的节点。对于插入操作,和二叉搜索树是差不多,只是最后要检查回溯时的树链上有哪棵子树违反了平衡。,除插入和删除,其余的操作就是在二叉搜索树的上的操作,与其它二叉搜索树基本一样。SGT的基本思想是对不平衡的节点进行暴力重构,从而保证整个树结构的平衡。原创 2022-11-11 14:48:25 · 416 阅读 · 0 评论 -
[LCT刷题][LCT+SAM+SegTree模板] 区间本质不同子串个数
然后考虑如何消除重复贡献:我们需要找到前序子串最后一次出现的位置,于是我们就利用后缀自动机的ParentTree,只需要沿着ParentTree到根节点的路径从下向上,所经过的节点一定都是以。但是不能一个一个节点的消贡献,考虑用线段树维护区间和,用LCT维护这条到根节点的实链,然后利用Access操作消除贡献即可。首先非常显然的是:维护区间不同的XXX一般要先离线一下。我们就直接离线询问,然后按右端点加入贡献。为右端点的子串,那么只需要维护。数组然后消掉贡献就可以了。原创 2022-10-22 15:42:22 · 276 阅读 · 0 评论 -
[LCT刷题][边双缩点] P2542 [AHOI2005] 航线规划
需要注意的是,在LCT中的所有获取祖先操作都要套并查集的祖先查询,否则查到的不一定是真实的父亲(因为点可能已经被缩进边双了)。考虑使用LCT+并查集维护边双缩点,对于每次连接的两个点检查是否位于同一连通块,如果不同则连边,否则就进入缩点,将。实际上LCT上不连父亲边也没关系,因为LCT上寻找父亲依赖并查集,而并查集维护了父亲信息。递归并查集合并并清空点,然后用并查集的祖先点作为缩点后的点连接到。首先将删边操作转化为离线逆序加边操作。以此来维护边双缩点。缩点的过程类似这样…原创 2022-10-21 22:42:19 · 246 阅读 · 0 评论 -
[LCT刷题][树链信息维护] P4332 [SHOI2014]三叉神经树
把黑题看成蓝题结果想了老半天感觉不对劲本题对于理解SplaySplaySplay和LCTLCTLCT结构具有至关重要的意义,值得反复思考。可能因为我比较菜。原创 2022-10-21 15:26:03 · 609 阅读 · 0 评论 -
[LCT刷题][连通性维护] P3950 部落冲突
链接:https://www.luogu.com.cn/problem/P3950。原创 2022-10-20 17:04:53 · 157 阅读 · 0 评论 -
[LCT 刷题][树链信息维护] P2486 [SDOI2011]染色
题目要求维护树上序列不同颜色段数,涉及到树链的性质,因此考虑用LCT解决。但是我们可以发现:颜色段计数跟线段树有点不一样。我们需要对树链上的每条边进行转换,将两个端点共色的边设为000,异色的设为111,那么最终答案就变成了树链上的和。但是我们发现这个题涉及了动态修改,因此我们需要单独的维护每条边,即在LCT的Splay节点上维护每个节点xxx自身的颜色xcxcxc,其左儿子的颜色lclclc,其右儿子的颜色rcrcrc,然后考虑如何上传答案:我们将上传分为三种情况讨论:当前节点xxx与其左右儿子都异色,原创 2022-10-20 14:35:42 · 315 阅读 · 0 评论 -
[LCT刷题][树链信息维护] P1501 [国家集训队]Tree II
要求维护树上路径和,支持乘法、加法。考虑如何使用LCT维护。首先LCT自带的反转标记仍然需要,在此基础上增加乘法标记和加法标记,然后会发现:标记无法像线段树一样用“区间长度”乘标记维护,因为LCT不具有区间长度规律。因此再记录一个sizesizesize表示所在辅助森林中的SplaySplaySplay子树大小,那么就可以实现标记下放:对于所有的操作,首先splitsplitsplit提取链,然后再对链进行操作即可。注意别抄错板子。原创 2022-10-19 22:36:17 · 229 阅读 · 0 评论 -
HDU5869 Different GCD Subarray Query 离线查询/区间贡献
那么用维护区间内不同数字的数目的思路解决。原创 2022-09-23 18:44:11 · 152 阅读 · 0 评论 -
29.CF1149C [Tree Generator™](httpswww.luogu.com.cnproblemCF1149C) 区间合并线段树
给定一棵树的括号序列,要求支持单点修改、查询树直径考虑区间合并线段树,每个子树的括号序列是按照先序遍历进行的,因此考虑合并两个区间的括号序列时的情况若从序列中任取一段连续子序列,从中去掉所有匹配括号后,剩下的括号组成的路径一定为一条链,链长为剩下的子序列树上直径长度即为任意区间去掉匹配括号后的长度的最大值。最长去匹配区间 = 最大的(将区间分成两段)后面的权值和 - 前面的权值和原创 2022-09-08 09:30:35 · 373 阅读 · 0 评论 -
27.CF1004F Sonya and Bitwise OR 区间合并线段树
给定序列,要求支持操作: 1.单点修改 2.查询区间内按位或和至少为X的子区间数考虑分治。现在需要计算跨越区间中点的左、右端点对数。记录以区间中点为一端的前后缀,搭配双指针就可以 $O(n)$ 计算原创 2022-09-08 09:29:05 · 164 阅读 · 0 评论 -
26.CF1000F One Occurrence
给定序列,要求支持查询区间内只出现一次的数字可以离线,那么离线所有询问后按右端点排序,然后加入贡献回答即可原创 2022-09-08 09:28:31 · 262 阅读 · 0 评论 -
25.CF992E Nastya and King-Shamans 转化+线段树二分
给定序列,要求支持单点修改,查询序列中 a[i] = s[i - 1]a[i]=s[i−1] 的点(SPJ)线段树维护a_i - s_{i - 1}a i −s i−1 的区间最大值,然后树上二分查询即可原创 2022-09-08 09:27:32 · 153 阅读 · 0 评论 -
24.CF915E Physical Education Lessons 线段树维护区间反转
给定$0$序列要求支持区间$0-1$反转,区间求和(容斥一下). 对原题可以发现容斥一下,初始全0表示全为休息日,然后打标记支持区间反转即可。原创 2022-09-08 09:26:57 · 101 阅读 · 0 评论 -
23.CF911G Mass Change Queries 动态开点权值线段树+线段树合并
给出一个数列$a_i \in [1, 100]$,有$q$个操作,每种操作是把区间$[l,r]$中等于$x$的数改成$y$.输出$q$步操作完的数列。原创 2022-09-08 09:26:26 · 193 阅读 · 0 评论 -
22.CF877E Danil and a Part-time Job
要求支持子树0101反转,子树求和。树剖序列化一下,然后按照0-10−1序列反转板子来就可以。原创 2022-09-07 09:40:30 · 102 阅读 · 0 评论 -
21.CF840D Destiny 可持久化权值线段树+二分查询
每次给出三个参数$l,r,k$,询问区间$[l,r]$内是否存在出现次数严格大于$\frac{r-l+1}{k}$的数。如果存在就输出最小的那个$ans$,否则输出$-1$ 区间大于$k$的数,于是想到用可持久化权值线段树解决,注意额外检查左右区间。原创 2022-09-07 09:39:01 · 168 阅读 · 0 评论 -
20.CF817F MEX Queries 线段树(Lazy标记练习)
要求维护集合,初始为空,支持以下操作1.加入[l, r][l,r]在集合中未出现的数2.删除[l ,r][l,r]在集合中出现的数3.区间反转操作,加入未出现删除出现每次操作后输出集合MEX原创 2022-09-07 09:38:20 · 145 阅读 · 0 评论 -
19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记
给定序B和整数K,要求对[B复制K次的序列]支持区间赋值、区间最小值操作。我们发现初始序列复制K次,于是想到初始就具有高度的重复性,可以用分块维护,但是发现普通分块难以支持区间赋值等操作。于是我们想到对每个块内分别建立一颗线段树,然后用再用一棵线段树维护各个块的信息。原创 2022-09-07 09:36:30 · 162 阅读 · 0 评论 -
18.CF786B Legacy 线段树建图+最短路
给定空图,要求支持 点-点连边、点-区间连边、区间-点连边。n次查询最短路原创 2022-09-07 09:24:03 · 147 阅读 · 0 评论 -
17.CF739C Alyona and towers 区间合并线段树
给定序列,要求支持区间加,以及查询最长先增后减子区间(单峰序列)长度非常典型的区间合并线段树,记录左右起LIS,LCS,单峰原创 2022-09-07 09:21:50 · 201 阅读 · 0 评论 -
16.CF718C Sasha and Array 线段树+矩阵快速幂
要求支持区间和操作,查询元素作为下标时的斐波那契和转换为矩阵快速幂形式,用线段树解决。原创 2022-09-07 09:14:29 · 186 阅读 · 0 评论 -
15.CF620E New Year Tree
要求支持子树染色、计算子树颜色数目,颜色60种颜色只有60种,那么将颜色状压,用二进制位表示颜色。然后用树剖+线段树维护即可。原创 2022-09-07 09:13:41 · 142 阅读 · 0 评论 -
14.CF600E Lomsat gelral 线段树合并
给定带权树,查询所有子树内出现次数最多的权值原创 2022-09-07 09:13:10 · 190 阅读 · 0 评论 -
12.CF558E A Simple Task 线段树维护字符串区间排序
要求对于给定的字符串,对给定的区间进行排序线段树经典应用,维护26棵线段树,实现区间覆盖和查询即可。原创 2022-09-07 09:12:27 · 193 阅读 · 0 评论 -
11.CF522D Closest Equals 线段树+离线询问
给定序列,查询区间内距离最近的两个相等元素。离线查询,按右端点加入贡献计算答案即可原创 2022-09-06 11:11:27 · 233 阅读 · 0 评论 -
10.CF515E Drazil and Park 简单线段树
给定一个环,i-i+1i−i+1之间的距离给定,每个点有点权h_i求这个最大值原创 2022-09-06 11:09:42 · 140 阅读 · 0 评论 -
9.CF490F Treeland Tour 线段树合并
给出一棵带点权树,求树上最长上升子序列的长度对每个点开两棵线段树,记录叶节点到当前节点的LIS和LDS,然后合并时取最大值即可原创 2022-09-06 11:07:55 · 483 阅读 · 0 评论 -
8.CF446C DZY Loves Fibonacci Numbers 线段树Lazy标记
给定序列,要求支持区间对应项加斐波那契数列,区间求和原创 2022-09-06 11:07:18 · 199 阅读 · 0 评论 -
7.CF438D The Child and Sequence 线段树维护区间取模
给定数列,区间查询和,区间取模,单点修改。记录区间最大值,对于区间最大值小于模数的区间不予更新原创 2022-09-06 11:05:40 · 175 阅读 · 0 评论 -
6.CF431E Chemistry Experiment 权值线段树+二分
给定数列,区间查询和,区间取模,单点修改。记录区间最大值,对于区间最大值小于模数的区间不予更新原创 2022-09-06 11:04:58 · 234 阅读 · 0 评论 -
4.CF383C Propagating tree 线段树+树上问题
给定树,要求支持给树的单点连续反转加值,查询指定节点的权值。原创 2022-09-06 11:04:23 · 182 阅读 · 0 评论 -
3.CF343D Water Tree 树剖+线段树区间覆盖
线段树维护树上覆盖问题,树剖序列化维护序列覆盖。原创 2022-09-06 11:03:52 · 190 阅读 · 0 评论