2023.12.25 近期练习

CF1793F

有一个朴素的想法,使用不删除莫队,使用一种数据结构维护相邻元素的差,O(nqlogn)
可以通过链表加不增加莫队,维护最小值,使用值域分块,O(nq+qn)
即使如此,也因为常数过大无法通过。
考虑使用扫描线,从右往左扫描区间,将询问挂到左端点上。
大于小于是等价的,先处理大于的。
我们假设现在扫到 ai,同步记录一个 fj 表示 [i,j] 的答案。
先找到右边第一个大于 ai 的,设为 aj,并将 j 点更新为 ajai
下一步,找下一个 ak[ai,aj),并继续地更新。
这里有一个优化,就是 ak 的范围可以调整为 [ai,ai+aj2],因为在 [ai+aj2,aj] 的势必与 aj 更近。
每次范围都减半,保证了复杂度,为 O(nlog2n+qlogn)
具体地,开一棵值域线段树维护当前值最小的位置,再开一棵线段树维护区间 f 的值。
这种问题是经典的区间询问问题,允许离线的话,应使用经典的扫描线模型。

CF1771F

出现次数为奇数,可以用异或来处理。
考虑建立主席树,可以查询一个区间的信息。
我们现在要求最小出现的数,考虑二分,只需要查询左边区间是否有数为奇数即可。
如果我们把每个数随机分配一个权值, 把所有数异或起来,如果有数出现奇数,那么一定有值。
二分可以放到线段树上二分。然后就做完了。
这类问题强制在线,只能用主席树,有关出现次数的应想到异或。

CF1788F

想到带权并查集,uv 路径权值给定为 w 的话那么 susv=w
我们可以通过带权并查集维护出若干连通块,同时可以判断无解的情况。
我们现在要求的是 ai 异或的和,如何用 su 表示出来呢?
i=(u,v),那么 ai=susv,所以只有奇度数点的 s 是有贡献的。
那么如何填数值呢?拆位去填,设一个连通块中该位是 0 的有 c0 个,1c1 个。
如果根填 0,那么值是 c1。若填 1,那么值是 c0。调整即可。
默认填 0,考虑把无论怎么填都是 1 的用可以填出 0,1 的去抵消。
这种问题是经典的带权并查集,之后二进制的处理应该用拆位,贪心即可。

CF1783F

先考虑只有一个数组 a,若选了 ax=iaiax 交换会发生什么?
很套路的,把 aii 连边,代表 ai 应前往 i,那么会形成若干个环。
如果我们操作 i 会发生什么?那么 i 这个位置会形成自环,i 的两端会连在一起。
所以我们不断的删点,一个环若大小是 m,那么只用删 m1 个。
所以一张图的答案是 n。那么两张图呢?
两种图不用删的点要是都不用删就好了,所以我们要尽量让不用删的点重合。
一个环只能出一个。将环做点去二分图匹配即可。
这种问题有关置换,可以建出“置换环”,之后转化成为二分图匹配的模型。

CF1778E

要支持换根以及查询子树,我们可以先钦定一个根 1,设换根为 rt,现在求子树 u
rt=u,为整棵树;否则,若 rt 不在 u 原先的子树,是 u
否则,设 rtuv 子树内,就是 v 子树取反。
子树内的话用线性基合并,复杂度 O(nlog2n)
子树外怎么办呢?考虑把数拍成 dfs 序,如果预处理前后缀和,就可以 O(nlog2n)
这种问题异或应与线性基联系起来,还有子树外信息的处理有关 dfs 序。

CF1823F

一道很典型的题。
直接列出方程,设 fuu 被经过的期望次数。
那么 fu=[u=s]+vtfvdegvft=1
那么就是 n1 次方程,考虑高斯消元,换成树上高消即可。
具体是,将 fu 表达成 fu=Affa+B 的形式,从叶子节点向上推即可。
t 为根,由于 ft 已知,再推回来即可。复杂度 O(n)

posted @   s1monG  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示