Loading

2025 02 做题笔记

0201

  • P11646 【MX-X8-T5】「TAOI-3」蓝宝石的存在证明:找一下规律,发现对于每个非叶子节点,必然每个节点都挂着叶子,直接对这个东西计数即可。

  • P11647 【MX-X8-T6】「TAOI-3」俄罗斯蓝猫:人类智慧做法,先找出前四个数,之后通过递推得出后面的数,前四个数第一次问 \((0,1),(0,2),(0,3)\),第二次问 \((1,2),(1,3),(2,3)\) 即可,之后每次问 \((i-1,i)\)\((1,i)\),作差是唯一的,于是你就能递推出每个 \(a_i\),我赛时的想法是先确定每个数再确定顺序,但是你可以先做一部分这个东西然后递推,就避免了询问一样的数。

  • P11648 【MX-X8-T7】「TAOI-3」2236 A.D.:把合并子树的部分根号分治,超过阈值之后重构,挺厉害的技巧。

0204

  • MX_WCD1_T1 删点 MST:考虑删掉一个点后会形成度数个连通块,由于摊下来是对的因此很能跑 kruskal,考虑怎么减少边数,通到根的边只需保留边权最小的,剩下的都会挂在 lca 上,摊下来也是对的。

  • MX_WCD1_T2 毒药:经典思路拆开 \(dis(u,v)\) 变到两边,由于根没了因此在 \(\text{lca}\) 处统计答案,简单分析一下可以发现 trie 启发式合并就能解决。

  • MX_WCD1_T3 宝石:写个暴力发现每次找 \(d(n)\) 最大且 \(n\) 最小的数减掉是对的,这样的数叫反素数,你需要注意到反素数个数很少,我没注意到,然后写个类似 dij 的搜(要写高精)搜出来,求答案的时候直接暴力即可,注意记忆化需要上一点手法,得用点哈希之类的东西,要写高精,不补代码了。

  • P9334 [JOISC 2023] Mizuyokan 2 (Day2):一个关键性质是长区间大小是 \(O(\log V)\) 的,具体证明可以考虑什么情况下中间可以断开,线段树维护之。

0205

  • MX_WCD2_T1 跳跃树桩:一个朴素的想法是直接单调队列优化 dp,每次直接更新,但是怎么考虑字典序最小?直接上主席树维护序列哈希即可。

  • MX_WCD2_T2 清除怪兽:抽象题,先跑一个 dfs 树出来,如果点数很少就直接暴力,否则枚举每条非树边并替换跑树的做法,我赛时写了一个模拟退火,还跑过去挺多分的。

  • MX_WCD2_T3 括号序列:先容斥一下,接着就是卡特兰数自卷积,这步有一个很巧妙的双射,映射成一个类似 \(\texttt{((A)B)}\) 的东西,这个可以直接反射容斥,最后推出来 \([x^n]F^m(x)=\binom{2*n+m-1}{n+m-1}-\binom{2*n+m-1}{n+m}\)

0206

  • MX_WCD3_T1 简单函数:变成 \(x \oplus a \le b\),一看就是逐位比较,把所有 \(x\) 插到 trie 上然后可以考虑问所有满足条件点的最小值,这个可以在 trie 叶子上维护一个 set 支持插入删除,然后就做完了。

  • MX_WCD3_T2 异或大师:还不错的题,一开始看错题目了以为自己不用必须选,这样就可以线性基直接贪心,但是你发现最多就只有 \(O(\log V)\) 个数必须选自己,直接对这部分 dp 即可,把不用选自己的数整体转移就可以做到一只 \(\log\)

  • MX_WCD3_T3 摩天大楼:很厉害的题,数据范围一看就是 dp,套路地把贡献拆到边上,然后就是算子树 siz 乘积,这个好像有点难做,这里是很关键的一部,先定一个根为第一栋楼最高的点,于是你就能知道每个点的子树的形态,可以由根连过来的父亲边的位置关系分成三类,这是可以 dp 的,而且 siz 也能很方便地知道,于是就做完了。

0207

  • MX_WCD4_T1 爬山:弱智题,注意到一定是第一轮把后面一个后缀的数降下来,于是枚举是降到了哪里,做完了。

  • MX_WCD4_T2 生成树:adhoc 构造题,官方解法是构造一条链再补上一个连向链上几乎所有点的点,用于连反边拆二进制位,洛谷还有加强版,但是碰都不能碰的花题,摆烂了。

  • MX_WCD4_T3 括号序列:神秘反悔贪心,\(m=0\) 直接从前往后用堆维护一下决策,否则只会根据上一步更改一个括号对,线段树维护一下最优决策,细节很多,不写了。

  • CF1305F Kuroni and the Punishment:答案的一个上界是 \(n\) 因为你可以全部调整成偶数,那么你会发现每个数大概率是不会被调整很多次的,考虑随机若干个数检测它本身和调整 1 的所有数的质因数,这个做法的正确性在于至少有一半的数被调整的幅度小于 1。

0208

  • MX_WCD5_T1 抽卡:求最大值的期望,套路地施 min-max 容斥,然后你发现你要算的是所有好的点的子集的贡献乘上容斥系数之和,一看就是 dp,官方题解是轮廓线 dp,我写了个分层转移然后 fwt 加速的做法,其实感觉本质上是相同的。

  • MX_WCD5_T2 分裂:一开始以为是神秘 LGV 题,后面发现其实就是考虑从左往右推,不难发现不重叠是无关紧要的,然后你需要注意到全部推到某一层时一个节点上的总和是很少的,否则就没办法停止,于是可以直接搜一下状态然后在一个自动机上 dp。

  • MX_WCD5_T3 假币问题:神秘交互,事实上是神秘构造,做法完全没啥参考价值,也不知道怎么想到的,总之就是分块然后分治。

0209

  • MX_WCD6_T1 串:简单题,直接枚举答案串 check 是否存在一个字符串使得答案串是它的前缀即可。

  • MX_WCD6_T2 环:想了一年都不会的数数,topcoder 太困难orz,考虑只有红红和绿绿的情况,每次加入一个线段就是考虑它是否和前面的一个线段组成了一个长度为 2 的环,是就是 +1,否则就是不变,算一下概率,或者可以考虑插入一个红红绿绿的时候相当于插入一个红绿,但是我也不是很明白这个为什么对/yun。

  • MX_WCD6_T3 树:很巧妙的思路,对子树差分然后用倍增维护这个结构。

0210

  • MX_WCD7_T1 染色游戏:简单题,考虑倒着做,每次一定只能把若干行或者若干列褪色,直接乘上阶乘递归即可。

  • MX_WCD7_T2 序列:\(O(n^3)\) 暴力冲过去了,正解做法是考虑记录折线上目前状态与最低点的差,因为最优解一定是选最低点左边所有 1 和右边所有 0,而有了这个信息之后答案是容易计算的。

  • MX_WCD7_T3 区间:min max 信息考虑 cdq 分治或是笛卡尔树上启发式分裂,我选了后者,只在一侧的共显示容易计算的,另一侧就是简单容斥。

  • AT_abc222_h Beautiful Binary Tree:简单拉反题,写在笔记里了。

0212

零零散散写了一些题,加上今天写的一起写在这了。

  • qoj9685 nim 游戏:哎,厉害题,赛时差 \(O(1)\) 个观察没有写出来,我赛时想到了从高位往低位做状压 dp,但是实际上这个东西更好的解释是从上到下考虑把某些数这一位 0 变 1,下面清零。一个贪心性质是当 \(a_1=0\) 时必然每层最多操作一个元素,这个可以考虑如果操作很多,那么把多操作的部分换到 0 身上不劣。而对于 \(a_1\neq 0\) 则可以有一位操作两次,对这个东西爆搜出方案即可,实现需要精细一点。

  • CF1446D2 Frequency Problem:比较厉害的题,不知道要怎么观察到众数必定存在这一性质,有这个性质之后无论是根号分治还是怎么做都是好做的。

  • P7417 [USACO21FEB] Minimizing Edges P:非常厉害的题,关键点在于考虑最终图上的最短路树,由于此时我们的路径是二元组,因此最短路图上可能有两条连过来的边,对于一个 \((x,y)\) 要么从 \((x-1,y-1)\) 来,要么是 \((x+1,y-1)\)\((x-1,y+1)\),最关键的是你要观察到最短路这个东西是密的,因此两部分必然存在,可以考虑从这方面构造图,剩下就是简单贪心了。

  • uoj418【集训队作业2018】三角形:经典的贪心 trick,我们要求 \(\min \{ \max \sum_{j<i} a_j+b_i \}\),对 \(a\) 的符号分讨之后 exchange arguments,然后经典地把一个点和父亲合并,由于你要算每个点的答案,因此我们先做一遍确定顺序之后线段树合并算答案。

  • uoj752【UNR #6】Border 的第五种求法:DAG 链剖分优化一些 SAM 问题的板子,把 border 看做 \(s[l,r]\) 这个字符串匹配过程中在 \(s[1,r]\) 祖先的节点,匹配过程用 DAG 链剖分刻画,然后就是简单数点。

  • AT_awtf2024_d Almost Bubble Sort:模拟赛 T2,厉害题,最关键的性质在于若 \(x\) 选了,那么 \(y>x\)\(p_y<p_x\)\(y\) 肯定也选了,你可以同样地交换证明这是对的,感觉是比较难发现的性质,可能要靠猜。然后把贡献拆到点上,且可以注意到对答案造成的影响随着选择顺序是单调的,于是直接贪心即可。

0213

  • P7729 交通运输(Wormhole Transportaion):厉害题,写了很久,先算出来最小环和最小环个数,这个可以通过预处理最短路和不经过最短路上第一条边的最短路及其方案求出,细节比较多,然后考虑若是仙人掌可以直接做,系数是把 \([1,n]\) 的节点连成树且 \(\sum dis(i,i \bmod n+1)=2n-2\) 的方案数,从第一个子树切两刀即可递归,若是正常图则要考虑重构的部分被多个最小环经过的情况,由于这部分是链因此你可以直接枚举做掉。

  • nflsoj:P1279 比赛:首先,由于一个点每次赢过的点是一个区间,考虑区间 dp,设 \(f_{l,r,x}\) 表示 \(x\)\([l,r]\) 的赢家的概率,辅助数组优化转移可以做到 \(O(n^4)\) 但是你发现其实我们只需要考虑 \(f_{l,r,l}\)\(f_{l,r,r}\) 即可做到 \(O(n^3)\)

  • nflsoj:P17039 小D与电梯:代码懒得写了,赛时比较蠢,上了个 cdq 处理最大值,但是注意到我们一定在后缀最大值处上电梯,于是你就可以简单 multiset 优化一下了。

  • nflsoj:P5263 简单的普及组计数:拉反题,类似括号串计数写出式子,最后用 lucas 定理搜出答案。

0216

  • nflsoj:P1344 树上路径划分计数:建完虚树然后直接 dp,板子。

  • qoj21888 最小表示法:PR#16 T1,考虑一个长度为 \(n\) 的字符串最小的位置在 \(p\) 的方案数怎么算,你发现如果最小位置不唯一,那么这个串必然有周期,于是可以考虑容斥出周期恰好为 \(d\) 的串,再除以 \(d\) 就是当最小周期为 \(d\)\(1 \sim d\) 每个点的答案,直接预处理所有的 \(d\) 然后后缀和一下即可。

  • qoj21889 二叉搜索数:PR#16 T2,赛时没有切非常不应该,关键转化我都想到了,但是赛时只想着去找父亲没想到直接求贡献和,事实上找祖先所有点的贡献和是非常简单的,就是前后缀时间前后缀最小值的权值之和,用单侧递归线段树即可做链的情况,树直接线段树合并。

  • qoj21890 黑白球染色:PR#16 T3,赛时想到了多项式的转化,但是并没有想到维护点值以及把变换详细描述,当时卡在 dp 那步了,以为必须要差卷积。做法是先建出一个类似直方图的树出来,然后在上面 dp,每次合并子树,然后对自己进行 dp,这两部分都可以用多项式描述,答案就是最后的 \(F(0)\),于是你只需要维护点值,中间的 dp 就是简单地乘上一个多项式,该多项式的点值也很好求。

0217

  • qoj2070 Heavy Stones:考虑把这个序列看做以 \(x\) 为根的两条链,那么这个问题就有经典的贪心形式,可以每次选出最小的和父亲合并,对于每个 \(k\) 你可以算出不考虑根的情况下前后缀的分块情况然后归并一下,块数总和是对的,可以直接线段树维护。

  • YD_R1_A 走马:怎么这么个题放 A?直接枚举每种排列然后算贡献是非常难做的,你发现我们好像只能把这个东西拆到点上算,一个点不够,考虑把 \(rank(\pi)\) 转化成 \(\sum{p_i>p_j,i<j}(n-i)!\),于是枚举 \(i\)\(j\) 算多少个排列有这种情况,继续拆,枚举两个位置上的数,由于性质很好,你只需要算大概四种情况,最后合并起来就做完了。

  • YD_R2_B 小半:这个题才应该放 A,先上二分然后考虑一些贪心性质,不难发现小于 \(\frac{mid}{2}\) 的数一定必选,否则调整不劣,然后就是问两边最大值和中间有多少个位置可以插进去,考虑对于一个数什么时候有插进去的贡献,你发现当且仅当左边小于等于它的数和右边小于它的数都必须了,然后合法它才可能会被选,这是个区间,直接主席树维护。

  • P5326 [ZJOI2019] 开关:PGF 题,好像没有想象中难,直接设出 EGF,生成函数是简单的,然后直接算即可。

  • uoj935【UR #29】数字生命:先考虑判定,最巧妙的一步转化是考虑差分,然后变成了推数到对应位置,接下来就比较 tricky,集合幂级数求一下 det 即可。

0218

  • YD_R2_A game:其实思路非常简单,考虑这张图很大范围都是空的,我们不妨尝试考虑一个周围“比较空”的点的最优决策,首先最后的答案一定大于等于右下角点的答案,因为后手可以操纵使得到达该节点,否则你注意到它的决策与它右下角格子的决策相同,因为先手能强制其到达右下角格子一步之内能到的所有节点。这个结论只要曼哈顿距离 2 以内没有其他节点都适用,因此暴力跑一下特殊点,剩下的直接算即可。

  • qoj6350 MIT:一般图最大权匹配点集增量,证明可以考虑调整目前解和上一个解构成的联通块,又有结论所有路径一定交于一点,而这个点必然是重心,故你每次直接选一个到重心最远的点,注意可能需要调整重心,线段树维护一下虚树直径和动态调整一下重心即可。

  • P5470 [NOI2019] 序列:正常两两匹配建图后建一条额外边表示可以乱匹配的限制,然后模拟费用流,考虑每次的增广路是什么形态,要么对齐,要么一个有匹配一个没匹配,要么两个都没匹配,对应用堆模拟费用流即可,由于每次一定走最长路因此贪心是对的。

  • P3826 [NOI2017] 蔬菜:小清新贪心题,类似超级钢琴,从大到小贪心,能放就放,并查集维护一下限制即可。

0219

  • AT_joisc2016_c 棋盘游戏:一开始读错题了,好像没有那么难,不难发现 1 和 3 两行的点一定是通过两边的格子点亮的,因此没被点亮的格子连续段长度最多为 1,而中间的则既能被左右两边又能被上下点亮,考虑如果我们钦定了中间的点的点亮方案该怎么求,此时有若干限制表示 \(x\) 必须在 \(y\) 前面,你发现这个限制很特殊,有关的单独算,最后归并即可,而这个是可以在 dp 过程中处理的,细节很多,写了很久。

  • AT_joisc2019_e ふたつの料理 (Two Dishes):最近状态非常差,难得独立做出来一个没有那么简单的题,考虑平方 dp 就是在网格图上走最短路,这个权值有单调性,考虑用数据结构优化转移,每次是前缀 chkmax 或者区间加,简单维护一下差分即可。

  • AT_agc034_d [AGC034D] Manhattan Max Matching:模拟费用流,拆开 \(\max\) 建图之后每次在关键点间跑最短路,然后据此增广,但是直接费用流也能过。

  • P6943 [ICPC 2018 WF] Conquer The World:模拟费用流,好像有很多做法,有一个做法是考虑贡献根据流是凸的,模拟费用流,每次就是 minkowski 和,还有一个做法是每次合并两棵子树,然后考虑反悔流过的匹配,可以带删堆简单维护。

  • uoj22 【UR #1】外星人:简单题,考虑每次只会跟比自己小的取模,倒着做归并一下没用的部分即可。

0220

  • YD_R3_A 赤团开时斜飞去:简单数据结构题,每次 twist 时只能在左右选一个线段做出贡献,线段树简单维护一下即可。

  • P7341 『MdOI R4』Phoenix:怎么赛时不会做,发怒了发怒了。把每一位看做线段,你考虑如果线段构成树形结构是好做的,但是线段之间可能有交,事实上这个是好处理的,因为一群有交的线段只可能有两种方案,合并完之后套构成树形结构的做法即可,注意算方案的时候有些细节,不能直接拿长度算,因为合并完会给孩子节点加一些限制,需要特殊处理。

  • AT_agc020_f [AGC020F] Arcs on a Circle:枚举小数部分的排列,然后状压 dp,也可以把枚举排列塞成状态做更好。

  • P11694 [JRKSJ ExR] 淇宝的划分:构式 MO 题,猜一下这个跟顺序有点关系,分讨一下可能的方案进行证明,还是别在 OI 里出这种题了吧/tuu。

  • CF2029I Variance Challenge:非常巧妙的思路!感觉是类似线性规划对偶一样换成了一个类似对偶元的东西,我们直接枚举 \(x\),然后要做的就是做 \(k\) 次区间加最小化该函数,因为如果不取到平均值一定不优,有点类似线性规划对偶,然后可以模拟费用流转最大子段和。

0221

  • YD_R4_A 伴君眠花房:集合不相等容斥板子,直接 \(3^n\) 就能过,为什么我数组开成了 3e5???

  • YD_R4_B 无可奈何燃花做香:好题,对于区间询问考虑扫描右端点或者左端点,你发现此时我们可以维护以每个点为起点或终点的路径段树,但是只能做单侧修改,不好维护另外一侧的限制,我赛时的想法是把转移用矩阵刻画然后线段树维护矩阵,但是后面发现没办法回答区间询问,你发现问题在于我们不太好维护更新对答案的贡献,考虑上点根号算法,直接树分块,于是豁然开朗,更新只需更新到关键点,剩下对于答案的影响系数可以预处理。

  • P11695 [JRKSJ ExR] 昼寝:神秘数据结构,我怎么光往吉司机上想了呢?想到放到序列上分治也不会做。考虑真正有用的区间很少,你相当于要判断被这个区间包含的所有区间的集合并是否等于本身,直接离线然后放到线段树上的节点上使得该节点完全包含该询问且询问跨过区间中点,此时我们可以把修改分为跨过中点的和没跨过的,且只有被这个区间完全包含的有贡献,每个线段只会被放在 \(O(\log n)\) 个区间上。对于跨过中点的,扫描时间维然后维护每个左端点需要的最小右端点,线段树二分找到无法被覆盖的最左最右端点;没跨过中点的扫描序列维,直接区间 chkmax 维护,如果发现某次 \([i,r]\) 修改完了有失败的就可以直接 pop。

  • nflsoj:P5211 穿越:考虑对一个联通块进行判定,大概是类似对每个点考虑多余的度数必须和上面合并,dp 刻画这个选取的过程,不难发现这个就是直接闵可夫斯基和,简单维护即可。

0222

好像比较划水。

  • nflsoj:17912 缆车:简单题,双指针算一下每个左端点对应的最左右端点,然后询问直接查。

  • P11770 檐牙覆雪:手玩一下发现可以递推出每个点的答案是 \(v_x \gets v_y+(\lfloor \frac{n}{x} \rfloor -p+1 )\),然后分数可以直接离线扫,其他的简单递推即可。

  • qoj10107 Deciding Game:ucupf I,有点像季风,先做一遍然后直接逼近到前一遍,如果永远极差小于等 1 就无解。

  • qoj10108 Divide the String:ucupf J,挺巧妙的贪心题,有点找回学 OI 的乐趣了,我们直接求出对于每个连续段能到达的最左最上或最下的点,每次往右的时候可以调整上一次的状态。

0223

  • qoj5746 DAG Generation:小清新数数题,我咋做了这么久/tuu,稍微转化一下变成算对于每个有向无环图其拓扑序个数的平方,算贡献变成枚举两个拓扑序找有多少个有向无环图满足这个条件,此时一个很关键的转化是直接钦定一个是 \(\{1,2,\cdots,n\}\),然后把答案乘上 \(n!\),接下来就很简单了,另外一个排列考虑从小到大插入,简单 dp 一下即可。

  • CF1408H Rainbow Triples:感觉想到把 0 分成两半就会了...,不知道赛时为什么想那么久不会,分成两半之后左边的数对右边没有限制,右边的对左边没有限制,于是变成每个颜色都能匹配一段前缀或一段后缀,考虑直接贪心,如果插不进去了就考虑可以把前面一个能匹配更长后缀的拿出来备用反悔,然后再决策一遍即可。

  • CF914H Ember and Storm's Tree Game:似乎是三题里最简单的一个,找一下性质发现是对一个全部递增或递减的树计数,直接 dp,不需要任何脑子。

0224

累,加训一下睡觉吧。

  • qoj9352 Highway Buses:比较套路的题,考虑最终贡献是一次函数,因此只有 \(t=T\)\(t=1\) 有用,答案怎么求呢?尝试一下最短路,你会发现如果我们把节点按照 \(dis_i+a_i\) 排序,那每个节点第一次被更新到的时候就是它的答案,现在的问题变成了怎么快速更新节点,邻域内更新考虑点分树,由于你还有额外的边,因此可以直接对于每条边上的一个点钦定过这个点然后找 bfs 树上深度最小的若干个点更新,更新完就删掉,点分树同理,可以做到单 log。

0225

  • AT_ttpc2024_1_e ReTravel:看错题没有独立想出来,还是太困了,由于一定是按顺序访问,因此可以直接区间 dp,每次一定会走到一个区间最左下的节点,可以直接转移。

  • qoj9675 电池检测:似乎是一个比较经典的构造,把所有数分成 \(a-1\) 个团,否则可以调整证明。

  • qoj9676 Ancestors:如果我们知道了每个点的 \(x\) 级祖先,那问题就变成了简单的区间数颜色,由于区间数颜色有一种方法是维护每个节点前面相同颜色中最靠近的位置,然后对这个二维数点,我们考虑维护这个东西,你可以在 dsu on tree 的过程中处理变化,不难发现变化次数是 \(O(n \log n )\) 的,因此可以直接套一层三维偏序解决。

  • qoj9677 基础博弈练习题:挺巧妙的题,首先考虑有向无环图怎么做,设 \(f_{u,t}\) 表示在 \(u\) 节点,\(t\) 时刻开始能不能赢,由于你可以走 \(n\) 步,因此后继能赢的你也能赢,还有一种可能是第一步走后继,此时可以考虑所有这样的时刻后继能不能赢,如果后继可以那你也可以。对于一般有向图,先缩强连通分量,同个强连通分量答案相同,接着还有一点特殊的是强连通分量自己内部可以转移。就类似上述转移,看哪里不能赢,哪里能走,对应考虑即可。

  • P5609 [Ynoi2013] 对数据结构的爱:线段树维护复合函数,我一开始想的是维护每个数经过之后变成什么样,但实际上变化只有区间长度种,而且满足条件的数是单调的,你可以预处理出这部分,最后在线段树上二分找答案。

0226

  • YD_R7_A ball:先模糊地分析一下,发现最优解似乎会把某些位比较高的全都单拿出来分类,那么考虑从高往低做,你发现每次情况比较固定,如果这一位没有的比较少我们可以全部合并在一起递归,因为单独放两块一定不优。

  • MX_R23_A tree:几乎是点分治+超级钢琴板子,用脚维护,我写了。

  • P7155 [USACO20DEC] Spaceship P:我想到了按照最大值分治,但是我想的是考虑所有前缀最大值所在的位置,这样很难转移,但是如果你考虑的是最大值,那么这个 2 进制数按照时间还能被看做一个树形结构,每次相当于挑出最大值然后往两边递归,这是好转移的。

0227

熨斗模拟+湖北省选模拟,打完了省选前所有要打的模拟赛!

  • P11822 [湖北省选模拟 2025] 团队分组 / divide:讲讲我的根号 log 做法,显然直接贪心是对的,但是贪心的过程中你可能会跳很多次,考虑加速这个过程,对于每个数,我们预处理后面 \(B\) 个位置跳过来会跳到前面 \(B\) 个位置的哪里,出去了就特判然后二分做掉,这个可以根号平衡到 \(O(n\sqrt{n\log n})\),但是空间限制比较小,\(B\) 必须开得很小,不过数据很水也过了。

  • P11823 [湖北省选模拟 2025] 最后的台词 / lines:感觉是简单题,\(k\) 相同的情况是好做的,每次往根直接跳即可。不同的话不难发现每次父亲的修改对应于 SAM 后缀树上孩子的合并,因此修改范围是整个区间且类型为区间覆盖,于是问题变成区间修改父亲,单点询问跳到一个小于 \(s\) 的点的距离,这里我写的根号,每次修改分块维护一下,数据很水,可以通过,好像有 lct 做法,但我不太会 lct/qiao。

posted @ 2025-02-01 20:35  eastcloud  阅读(193)  评论(0)    收藏  举报