希望大家监督我做题。
AT_arc098_d 蓝
Start 2026.9.13 20:36
从瘦冰过来的,考虑二分答案,考虑重构树。小的更可走,于是搞最小的重构树。
一个发现是,根链单调性其实不依赖重构树的序方向,最小重构树也可以通过二次重构实现单调性反转。但这没有实际意义,也许有应用但这里并没有弱化问题。
一个矛盾点是,越投入可达性越弱,这个很何意味。正难则反一下,假设我们有了走完所有点以后抵达最终点时剩下的钱数,于是倒推就变成拿钱过关卡。刚好和瘦冰那个题是反过来的。
然后初始钱数和最终钱数的差是固定的,二分答案改成二分最终钱数。直接反着跑瘦冰就好了吧。
upd:sol.
End 2026.9.13 20:57
Code 2026.9.14 20:42
Debug 2026.9.14 20:55
Accept 2026.9.14 22:15
P7214 黑
Start 2026.9.16 11:16
作弊一下看眼 tag,线段树最短路,优化建图?这个题和最短路什么关系。偏序关系是不是可以刻画一下。你比我早还比我小,被我包饺子了,那是不是根本没用来着。
作弊得到了同学一个 hint,一个方案有可能是形如早些时候处理了左边一段区间和右边一段区间,没有交,但是刚好现在中间贴了一个把两坨东西连上了,于是中间的东西就消失了,不会继续扩展。
偏序关系刻画不了了啊,咋刻画。你考虑到,在我前面的被我包饺子的区间,可能杀掉了中间仅存的一部分病人,如果不杀这一步中间传染开最后变成我无法控制的样子,于是炸掉了。这个和 hint 同理的,其实更好说是 hack 而不是 hint。
再作弊再得 hint 一个,可以拍到网格图上去做。纵轴时间的话,每个操作的控制范围其实是一个答辩状物,有啥用吗这个。
拉一个横轴切片出来,把选中的答辩在这里的切片有覆盖的位置挖掉以后,这里会形成若干个段,于是其实是合成大答辩的过程。上面的答辩会更大一点因为中间的消失了。边界有 corner,半坨答辩。
是不是可以对着这个网格图图论建模,啊?那就是找一个从左到右的最短路。那是不是套路的做法就是,区间左端点向右端点连一个边。右端点应当得免费的去指向一些可以无缝衔接的区间的左端点,可以是不同时段的,反正能衔接上就可以,重合也没关系。
那其实直接搞有个麻烦是,免费边可能被滥用,那其实应当是给右端点,就是,拆个点,每个点作为左端点一个单点,右端点一个单点,然后连单向边。那其实只需要观察左端点,我一个右端点能连接底下的左端点当且仅当你的左端点不断右移后依然在我左边。
问题是啥,就是,底下的右端点飞到了左端点左边。这个没关系,因为从左边能走到当前位置左侧的肯定都解决了,于是最短路自己会调整。这个最优吗,存疑。另一个问题是,你的左端点其实在我这个区间左端点外面,甚至右端点也在我的左端点外面,但其实按照上一句一样的。
但这个问题其实依然很大吧,讨论的是从上面往下面连,但这个方向肯定不对啊。下面往上面连,其实只要求你的左端点在答辩的覆盖范围内。不对那合成答辩怎么处理。
合成答辩自上往下的连边是可以处理的。其实也不是很好处理,如果你源点设置的不是端点,那么你会发现往某个方向走路的边会干涉到另一个方向的解,于是炸了。考虑拆个图。但拆不开啊。
最终答案里可能会有理论上已经死的区间做贡献,这个也很难搞。火大,不会做。开题解。
Stop 2026.9.16 12:20
Continue 2026.9.16 12:52
Solution 2026.9.16 12:52
哦我草,傻逼来了。下面往上面连要求的是,右端点不断左移,然后上面的左端点依然比右端点左边,其实就是原先另一个东西的镜像。然后正确性也是类似的,因为是从左向右的逐步走,问题两个都会因为不优被最短路本身自己排除。
于是问题就变成模拟这两个东西建图。因为是镜像的所以都可以看成右端点可以往里缩,形成的两个和左边界相关的半坨答辩内所有点左端点连边。然后你发现其实不用纠结随着时间推移右端点的移动,如果能抵达终点那么半坨答辩不会内缩,不能的话后继边也不是当前时间刻的右端点决定的。于是右端点只需要对一个三角形内的点连边就可以了。
?我不会建这个图。这个好像确实是线段树优化建图就可以做到的。哦不对啊其实极其有问题,你只能对有效点连边,否则最短路的复杂度其实是 \(O(m\log n)\) 的,百万边直接急哭。不会,再看题解。
Solution 2026.9.16 13:29
哦其实可以把依托答辩看成单点的,我去不早说。迷惑啊,还是不会,是不是要猜一下建边的条件然后推推式子。连边条件是 \(|t_i-t_j|\le r_i-l_j+1\),对时间排序可以丢掉绝对值。这个连边条件是 \(i\) 指向 \(j\) 的有向边。
草我怎么要上物理课。
Stop 2026.9.16 13:57
Continue 2026.9.16 16:46
直接考虑把区间的重心压在右端点上,左端点当卫星信息辅助连边用。不对我讨论这个干啥子,上个课把思路上断了。先转化一下式子。
这个式子其实拆一下无非就两类,然后其实也不用管什么去不去绝对值,只要分讨的两类都满足就可以了。两个式子,第一个是 \(t_i-r_i\le t_j-l_j+1\),第二个是 \(t_j+l_j\le t_i+r_i+1\)。移项完就变成处理 \(C_{i,0}=t_i+l_i\),\(C_{i,1}=t_i+r_i+1\),\(C_{i,2}=t_i-l_i+1\),\(C_{i,3}=t_i-r_i\) 四项。
那要满足的式子就是什么,\(C_{i,3}\le C_{j,2}\) 以及 \(C_{i,1}\ge C_{j,0}\)。欸转二维平面转移是不是就搞定了,这个很适合 dp 吧我说真的,哪里是什么最短路。哦边的方向是不是搞错了,但是这样建边所有边都反过来于是相当于倒着跑,都一样。
那其实问题就变成,每个点都可以从二维偏序的位置转移过来,然后有些点是原始可行可以从虚空转移过来,即原始 dp 值是自己,其他点初始都是 inf,有些点是接收点,需要求所有点转移得到的最小值,返回接收点转移得到的最小值的最小值。
欸?cdq 不是做完了。这个做法真对吗????为啥和现存题解不一样也和 tag 对不上啊。
End(?) 2026.9.16 17:20
哦我知道了我在饭堂。这是一个基于二偏转移的 dp,那直接线段树维护就搞定了,锤子 cdq,糖爆了。一维前缀和二维线段树更高维才 cdq。感觉没啥问题,虽然不知道最短路在干啥不过直接 dp 特别对吧我说真的。
然后有个细节在这里,因为一个点产生贡献向后转移的位置和接收转移的位置不一样,所以要警惕一个点从前面转移过来的时候在前面插入了贡献点,导致后效性。不过观察到上面单个节点对应维的变化有明确的方向,也就是说变化的方向是相同的(单调性),所以一定有办法设计出无后效性的 dp,构造一下就可以了。
corner 的话是转移图不一定是 dag,但是考察转移条件可以得到结论是,如果非 dag 那么成环的两个点必然重合,那事实上也不在意相同点的转移了。相同点按照,先走起始点,再走中间点,最后走终止点的顺序排序即可。按照一维排序时,一轴相同另一轴按照升序排序,显然对。
upd:sol.
End 2026.9.16 17:25
P6684
Start 2026.9.17 18:40
Solution 2026.9.17 18:59
放弃思考 part
(补录)这个世界完蛋了,我完蛋了。我为什么不会这个东西,我不会整体二分?????不是这个东西的复杂度,凭啥对啊??完蛋了整体二分,全世界第一等死亡算法。气哭急疯。
trick 是好的,就是这种东西可以选择先去预处理每个位置的答案成立的界,不对着询问二分而是对着预处理二分。相当于是提供一个思考方向,看到题目以后可以直接对着要维护的信息转化出带单调性的模型然后上整体二分,不一定要死磕查询。
现在的卡点大概是,这个啥子东西,就是,复杂度分析上是允许去遍历询问和答案两个区间的,但是这两个区间内有个 gap 需要预先建立维护出来。题解的意思是中间的这个区间可以带撤并查集就做完了。
?为啥我做不了啊,我的思路是对每个 \(l\) 去二分定点 \(r\),即找最远依然成立二分图的点。然后正常暴力 check 是从预期答案点直接暴力向前遍历到 \(l\) 然后逐个加边,现在前后缀依旧暴力,要从上面继承的这个预处理的 gap。你注意到怎么是右端点反复移动的同时,左端点也在反复动啊???这带个鬼的撤啊??
手玩了五层的分治没找到合理的解释和做法,检测到这个 gap 完全就是瞎动一气,完全无法理解了。不做了喵的,死亡完了。Zero 的意思是这个题是单栈模拟队列板子,那等我咕。rmq 笔记里有这一集。
完蛋了这个题。完蛋了。其实这个甚至不是第一次见,第一次大战是 log to alpha 里的完蛋莫队,按照 \(4\times 10^5\) 算数据范围根本不可能过的,kdl 实现的比较好可以草到不错的分(甚至不是压到 alpha 的版本),我狂取暴力分 /kx 然后线段树分治做法也完蛋了,完全无法理解。
等我咕掉不删除双指针回来草飞这个题。
Stop 2026.9.17 20:58
P8330 黑
Start 2026.9.20 16:52
我是作弊的。这个题是 wcid 之前讲过的根分题,但这不影响我除了这个题是根分以外什么都不知道。不听课,区区区,区区区区区区区区区。那节课我好像在大战重构树课件,,
不全相同,然后操作可以是负数,于是操作一定比不操作优秀。肯定是按照出现次数根分吧,考虑到出现次数大于 \(\sqrt n\) 的数字数量一定不会超过 \(\sqrt n\) 个。有啥用吗这个。
核心观察是事实上你钦定完众数以后有关的只有要么是众数,要么不是众数,不是众数的数字可以看成都是同一个颜色的。操作其实等价于选定一个区间,把区间里的所有数字置换一下。
那其实就是,对每个数字判断钦定其成为众数以后,这个数字操作后最多能有多少个数要算出来。原题就是想让我们干这个的。
是不是可以拍一个数据结构维护区间里出现最多的颜色出现次数,然后对于 \(cnt\) 小于 \(\sqrt n\) 的我们可以 \(O(cnt^2)\) 的枚举挖掉置换的这个区间,然后用数据结构维护中间的这一坨置换最优的解法,于是就能做了。这个部分复杂度最坏容易发现是卡满 \(cnt=\sqrt n\) 的,于是在这个数据结构上的查询次数是 \(O(n\sqrt n)\) 的。
这个咋维护啊,莫队??那不是纯纯死亡来的。不对啊这个数据范围拉满了 \(n\le 5\times 10^5\),这搞锤子数据结构啊,是不是要分块做到 \(O(1)\) 来着?不会。
如果是出现次数大于 \(\sqrt n\) 的,我们可以做前后缀和,这样复杂度也是 \(O(n\sqrt n)\) 的。然后呢,不会。莫队的复杂度是 \(O(n^2/B+qB)\),如果 \(q=n^{1.5}\) 那么平衡完复杂度是 \(O(n^{7/4})\)。有锤子用。呜呜滚去吃饭了。
Stop 2026.9.20 17:41
Continue 2026.9.20 19:32
抄题解去了,吃个饭我就能会了吗,,,我咋这么菜,,/ll /ll /ll
Solution 2026.9.20 19:35
哦我草可以这么刻画吗,我是一个糖啊。题解的意思是可以先去做掉出现多的数字中间挖区间修改的情况。
考虑两个涉事数字 \(x,y\),然后先当成都是出现次数超过 \(\sqrt n\) 的,于是对数是 \(O(n)\) 个。然后操作区间就是 \(cnt_y-cnt_x\) 最大的区间,这个问题是最大子段和,直接扫过去做 dp 就可以了。容易发现一个点最多参与了 \(\sqrt n\) 次扫描于是复杂度 \(O(n\sqrt n)\)。
欸不对,其实这样好像做劣了,因为你这样扫其实经过了非常多的滚木点,这个是无用的复杂度消耗。直接把所有元素出现位置存下来然后两个 vector 做类似归并的东西跑前缀和做最大子段和就可以了。哦然后你发现这样就丢掉了大数与大数的限制,中间换进来小数一样是可以做的。复杂度的话,自身的扫描好像还是会炸,于是事实上你还是需要维护以下每个点的前驱,这个玩意可以直接并查集事实上是静态的可以直接做于是少掉一个 \(\alpha\)。
最后复杂度是来自于外侧所有点都会经过一次,然后做自己的时候需要重构一遍整个序列处理前驱有效点,于是因为出现次数大的只有 \(\sqrt n\) 个复杂度做到 \(O(n\sqrt n)\)。
上面这个只是做了出现次数多的数字中间挖空的情况。然后根据我作弊得到的结果下一步要分讨出现少的数字中间挖空填出现多的数,以及出现少的数内部组合的情况(,然后等会发现一个都不会只会做出现多的数套东西就彻底倒闭了((((
出现的多的数字是不是依然维护出来 \(\sqrt n\) 个前缀和。不对,如果是少的中间挖空填大数,那其实一样做上面的东西就可以了,把两个东西的正负号换一下然后基准换成外来数字就搞定了,于是我们实现了一个外部数字将中间挖空换成一个大数的情况。
接下来是小数和小数内部的组合。诶这个有啥性质吗,我咋还是只会上面那个莫队。有了上面两个方案其实是可以剪枝的,但这个对复杂度的影响不大吧我说真的。你考虑要是没有出现次数多的怎么做,每个数字的出现次数都是 \(\sqrt n\) 以内的。欸,我草了,我不会。
Solution 2026.9.20 20:14
哦哦好哦前面的部分对了一下分讨的似乎没啥问题,但是我不会的部分还是没看懂。经典题作弊都做不出来的吗,急哭,,
hint 说是有个性质,我们现在要求的这个查询区间内的区间众数只需要出现次数小于根号的了,也就是说把大数扔掉以后其实提供了性质出来。欸不是,这个有啥用来着。
哦哦!我是不是可以对每个点预处理如果以这个为左端点,然后区间众数要至少达到某个阈值需要保证右端点至少的位置。这样的话复杂度就是 \(O(n\sqrt n)\) 的了,直接对每个取值跑一轮双指针就对完了。
于是上面那个 \(O(n\sqrt n)\) 的询问可以用这个预处理出来的结构实现,啥哦,平方的查询???什么鬼。其实是 \(O(n\sqrt n\log n)\),但依然爆炸,,,无敌了这咋搞。
哦哦会了,其实你注意到 \(O(cnt^2)\) 枚举的时候一个端点是不断右移的,于是相当于每次都做的是双指针,于是复杂度就对了。吗?这个玩意原先是 \(O(\sum cnt^2)\) 但现在变成 \(O(\sum cnt\times B)\) 了啊。
哦但是这相当于是每个点跑满 \(O(B)\) 的复杂度,于是依旧是 \(O(n\sqrt n)\) 的,于是我们搞定了这个题。
一点反思,感觉上面的思路有一个很大的问题,就是做 \(O(cnt^2)\) 的时候采用的是构造最坏情况来说明复杂度,其实可以直接放缩到 \(O(cnt\times B)\) 的,于是就能够有一个很顺畅的思维链得到做法。这个很有价值吧我说真的 /学习
End 2026.9.20 20:42
Code 2026.9.22 18:03
Debug 2026.9.22 18:52
Stop 2026.9.22 18:52
Continue 2026.9.22 21:11
Accept 2026.9.22 21:14
P3992
P4565
P6765
Start 2026.9.24 19:38
这个题,我是不是见过。为啥一点关于解法的印象也没有,todolist 也没加。估计是因为太难给扔了。重新攻击一下。
首先如果只有一个车就是重构树板子。先让一个车走重构树出来的路是不劣的,这个结论应该没问题。强制在线恶心啊,离线是不是有简单一点的处理办法。不知道。
答案路径应该是基于重构树的这个路径改出来的,在这个路径旁边加一个边扩展出去一个平台中转就可以了。但不对啊要是这个中转平台特别大那不是死掉了。hacked,彻底倒闭。哦不过事实上答案有单调性,所以先刻画重构树肯定也没有问题。先去泡个面吧饿了。
Stop 2026.9.24 19:45
Continue 2026.9.24 19:51
在泡了等 5min。可不可以二分答案一下。怎么做,如果子树内存在点不在原始最小生成树上这两个点的路径上,那显然就对了。可这个也没法做吧,重构树维护原始树形本来就是完全搞不来的。草了时间怎么差不多了,去办公室提取面条。
Stop 2026.9.24 19:56
哦对了 warma 更新了我还没看完,什么啥子 OI 狗都不打看视频要紧。
浙公网安备 33010602011771号