集训队互测2025
Round 1
飞带长队的题!一些碎碎念待补
Round 2
开考延迟了半个小时,怎么会是呢?
发现 T2 是个 DS,然后发现某一个特殊性质就不太能 polylog 做了,于是考虑撒点树分块,然后对完了,写了写卡了卡常 1h 过了。
仔细阅读一下 T1 题面,发现好像并不是很困难,写了 1.5h 交上去获得了 \(22\) 分的好成绩。仔细思考发现我并不会算循环节,猜了个展开的结论发现错完了只能过 \(58\),但是把展开次数变大就能过 \(76\) 了。
吃饭+思考了 1h 发现啥都不会,于是卡了卡常把展开次数再变大一倍然后就过了,感觉我和出题人都挺唐。
这时候还有 0.5h 看 T3,发现只会 \(D=0\) 并且还不一定能写出来,于是写了个 \(3\) 分暴力开摆了。
本来觉得会被大家大胜,但是 T1 去尝试乱搞的好像没有几个,于是就没有被大家(除了 cxy)大胜,还为 cxy 贡献了愉快的一天!
生命的循环 by yxh
居然不是 poly 的,我糖丸了。
首先发现只有一个 \(1\) 进入到一个环中才能循环起来成为周期,所以对于每个 SCC 考虑。
假设全图都在一个 SCC 中,则我们要求的相当于是所有环长的 gcd。因为所有环长 \(\leq B\),所以枚举这个 gcd 然后 \(O(m)\) 判定即可。
然后发现一个本来周期为 \(x\) 的点经过一个 SCC 后周期会和这个 SCC 环长的 gcd 取 gcd,于是用个搜就能搜出在 \(n\) 号点处的一些二元组 \((x,y)\),表示在足够长的时间后,\(t\bmod x=y\) 的 \(t\) 是为 \(1\) 的。不满足任何一个二元组的为 \(0\)。
如果对于所有没有出现的二元组 \((x,y)\),满足 \(t\bmod x=y\) 的位置中至少有一个 \(0\),则求周期是简单的。现在我们需要将原来没有出现,但是实际上没有 \(0\) 的二元组 \((x,y)\) 补齐。
考虑枚举解模 \(I=2^5\times 3^3\times 5\times 7\) 的余数,这时对于所有的 \(x\),\(\frac{x}{\gcd(x,I)}\) 要么相等要么互质。互质的限制之间没有影响,相等的限制之间类似于一个取交的过程。于是就可以用 \(O(B^2I)\) 的时间补齐这样的二元组。总时间复杂度 \(O((n+m+I)B^2)\)。
但是实际上可以进一步缩小 \(I\) 的范围!注意到如果 \(\frac{x}{\gcd(x,I)}\) 要么相等要么同为某个质数的幂次也是可以做的!于是 \(I\) 就可以折半到 \(2^3\times 3^2\times 5\times 7\)。代码不想写了
树上简单求和 by xde
树分块,满足每个点往上到最近的关键点不超过 \(\sqrt n\) 步。
修改转化成前缀修改,先暴力做非整块部分,容易用一个 \(O(1)-O(\sqrt n)\) 分块做到。然后对于整块,在第二棵树上预处理前缀和就行了。时间复杂度 \(O((n+m)\sqrt n)\)。
路径计数 by zhy
poly 我哪会啊???
upd:会了,但是待补。
Round 3
开考看 T1,发现是环上邮局经典题,先放一放。看 T2,发现部分分前 \(50\) 很唐,还有 \(20\) 可能也很唐,感觉是个唐题。看 T3,发现 \(O(n^2)\) 暴力只有 \(34\) 分,感觉是个观察一点性质就能写出一个 poly 做法,然后用个数论分块优化的题。
然后做了 1h T2 以及 1.5h T3,啥都没做出来,破防了。
2.5h 的时候想着回去把 T1 写了,写着写着发现是 3 个 log 的!硬着头皮写完发现只有 \(60\)。感觉需要上个压位 Trie,但是我不会啊???破防了。把 T2 暴力 \(50\) 和 T3 暴力 \(4\) 写完就下考了。
感觉被大家大胜了,结果真的被大家大胜了!
环上排序信息最优分割 by zxb
zxb 真会出部分分……
如果能枚举起点,做 DP 是简单的,并且因为满足决策单调性,容易用 set 优化到 \(O(n\log n)\) 单次。
然后发现整体也是有决策单调性的!具体的,记 \(l_{i,j}\) 为起点在 \(i\),在第 \(j\) 段的划分点是什么,则满足 \(l_{i,j}\leq l_{i+1,j}\),于是枚举起点的同时再套一层分治就行了。选取最短的段作为起点即可做到 \(O(n\log ^3n)\)。
然后发现我们 set 要做的事情只有维护前驱后继,于是可以直接上压位 Trie,或者只删除不加入的回滚链表。时间复杂度 \(O(n\log ^2n)\)。
Round 4
成为了 DX 的验题人,于是成功避雷了这场比赛!
观虫我 by ylq
之前以为这个题是不能优于 \(O(q2^\frac{n}{2})\) 的!被震撼到了!
我们显然有一个 \(O(2^{\frac{n}{2}})\) 处理一次操作的做法:对于修改,让前半部分的 \(0\) 向 \(1\) 贡献,对于询问,让后半部分的 \(1\) 向 \(0\) 查询贡献。
考虑这个东西的本质是啥,容易观察到相当于修改是一个 \(2\times 2\) 的矩阵 \(\mathbf A\),查询是一个 \(2\times 2\) 的矩阵 \(\mathbf B\),要满足
这两种方法情况分别对应了
显然我们需要再编一种方法出来,考虑容斥,枚举哪些位是 \(0\) 就可以得到
考虑到每一位可以独立选择使用哪一种方法,我本来以为能像 毒蛇の脱走 一样写出一个 \(O(2^{\frac{n}{3}})\) 的做法,但是不能(
但是如果我们随机化呢?对于每一位,我们在三种方式中随机一种方式对这一位进行操作。这样的正确性如何呢?
考虑每一次修改/询问操作在所有 \(3^n\) 种选取方案中需要操作次数的总和,假设当前是修改操作,则某一位需要枚举当且仅当这一位是 \(0\) 且选择了操作 \(2\),或者这一位是 \(1\) 且选择了操作 \(3\),那么操作次数总和是 \(O(4^n)\) 的,查询类似。则如果我们随机选取单次操作的期望复杂度是 \(O((\frac{4}{3})^n)\) 的。但是这个随机的方差会很大,所以需要多随机几次找到最小操作次数的操作。
对最后 \(\log \omega\) 位进行状压,即可做到\(O(q(\frac{4}{3})^{n-\log \omega})\) 。 submission,在胡策 OJ 过不了一点。有没有老哥教教啊?
但是赛时唯一通过的 lhx 给出了一种近乎暴力的做法:将 \(32\) 位拆成四份,维护每个修改对这四份的影响,查询的时候与起来即可。需要对于修改手写 bitset,是 \(O(q2^{\frac{n}{4}}+\frac{q^2}{\omega})\) 的。 submission,因为常数非常小所以在胡策 OJ 嘎嘎乱过。
Round 5
开场发现 T1 很唐,随便写了写过了。
然后推了推 T3 的性质发现啥都推不出来,于是考虑怎么优化暴力,发现和希望很像,大概需要写个主席树,这辈子都是不可能写的,于是开始看 T2,发现大概莫二离一下就行了,写的时候唐了挺久,到 3.5h 的时候过了。
最后给 T3 补了 26 分暴力下播了,发现大家都不想写 T3,于是混到了 rk1。
Round 6
开场先吃了半个小时早饭,看了看题,发现 T1 很小清新,T2 能做?T3 感觉和 22年 D2T2 比较像的题。
先把 T1 给写了,然后看了看 T3 有一些想法,回去看了看 T2 发现 Karatsuba 能做到 \(O(7^n)\),过了 \(n\leq 10\),然后发现其实可以做到除了拉丁方 \(O(6^n)\),拉丁方补一个三进制 FWT 就行,于是写到 3h 的时候过了。
T3 想了一会儿发现会了个贪心,先写了个暴力发现过不去一点,但是我大样例全过了啊?调到 4h 没调出来哪里错了于是想写了个更暴力的暴力对拍,发现更暴力的暴力还是过不去??
这时候有点破防,冷静一下发现我没考虑一个点同时有两种操作的情况,直接开始改第一份暴力,改完就对了,还剩 0.5h,加了个线段树就过了。
感觉大家会再 AK 一个,但是 zj T3 暴力没调出来,lhf 和 cxy T3 是 2log 的,于是苟到了 rk1。
Round 7
开场先看了三个题,1.5h 的时候发现都会了,优势在我!
于是决定先写 T2,先写了个暴力,然后先没管空间写了一下发现 \(n\leq 5000\) 的部分还是能过,但是 \(n\leq 2\times 10^5\) 过不去???啥玩意???然后看了 1h 发现某个位置指针往后少移动了 1,改了就过了 50,剩下的 MLE 了。这时候其实还是在意料之中的,然后改了改将静态空间压到 70MB,再交了若干发还是过不去就红温了。我发现不管我怎么造这棵树,动态空间都超不过 80MB,我到底是怎么 MLE 的???OJ 上显示我需要 180MB 内存,不懂。
去翻了翻官方群,发现有人说胡策 OJ 对于递归的空间非常大,于是把所有 dfs 都改写成循环,发现就过了,只用了 70MB。和 T2 出题人爆了!
这时候已经 4h,感觉要飞龙骑脸输了,先去吃了个饭冷静一下思考 T3,发现 T3 挺好写的,于是先写了个暴力,发现还是过不了一点,调到 12:51 发现有个地方多了个等号,改完就对了。但是还剩 9min 写集贸正解啊???于是开始拼暴力,结果啥都没拼出来,10 分遗憾离场。
最后被大家倍杀了,嘻嘻。
Cyberangel
2log 直接写就能过了,1log 要考虑的可就多了。
考虑分治,按照权值从大到小加入点,维护两边单调栈。
计算贡献大概需要在某一边的单调栈,可以直接二分 \(O(n\log ^2n)\),也可以并查集 \(O(n\log n\alpha (n))\),由于常数原因两个跑得差不多快。
新生舞会
和卡空间的出题人爆了!
首先如果不卡空间这题就很唐,直接维护 Trie 合并,支持整体 xor 就好了。
压缩 Trie 是不可能写的,这辈子都不可能写的。考虑用树上 dsu 替代掉动态开点的合并。注意到一个点的 sg 值不超过其子树大小,于是在每个重链顶压位记录这个点的子树内哪些 sg 值是有的,然后和一般 dsu 类似做就行。
时间复杂度看上去是 2log 的,但是实际上因为每次修改都是修改一个连续的区间,所以复杂度是 \(O(\log n+siz)\) 的,所以时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n)\)。注意在胡策 OJ 上不能写递归。
PM 大师
如果能维护出对答案造成影响的 \(a_i\not=0\) 集合 \(S\),则询问第 \(y\) 个 \(0\) 的答案就是不在 \(S\) 中的第 \(y\) 小值。
考虑将一次操作拆分成先将 \(a_x\to -1\),再将 \(-1\to k\),我们分别考虑每个操作的影响。
当我们将 \(-1\to k\) 的时候,需要考虑 \(a_x\) 是否变得对答案造成影响。一个简单的判定方式是:如果 \(x\) 前面的 \(0\) 的个数加上 \(x\) 前面比 \(k\) 小的且对答案造成影响的数的个数小于 \(k\),则这个数就会造成影响,否则不造成。
但是这样判定有点困难,直接做是一个动态二维数点的过程。考虑如果有一个 \(y>x,a_y<a_x\),且 \(a_y\) 对答案造成了贡献,则 \(a_x\) 一定对答案造成贡献。也就是说,把上面的判定方式放缩成: \(x\) 前面的 \(0\) 的个数加上比 \(k\) 小的且对答案造成影响的数的个数小于 \(k\),是不会影响答案的,这样就可以用树状数组简单统计了。将 \(a_x\) 计算入答案可能会导致后面的某一个数对答案不造成影响,也可以用上述类似的式子判定。\(a_x\to -1\) 也是类似的,如果当前的 \(a_x\) 对答案造成影响,删去后会导致至多一个后面的数重新对答案造成影响。
容易发现上面的过程都可以用一个值域上的线段树维护,时间复杂度 \(O(n\log n)\)。
Round 8
感觉这场有点色了。
先看了一下三个题,感觉 T1 和 T3 差不多简单,T2 有点 hard。
先开 T1,发现从上到下确定就好了,大概需要写一个子树 mex,均摊一下就 1log 了,1h20min 过了。
看 T2 发现并没有我想象得那么困难,好像树分块之后块内树上背包,块间 NTT 就能做到 \(O(n\sqrt {n\log n})\) 了,拉了个 poly 板子 2h 的时候过了。
接下来 3h 写一个 C,怎么输!先写了个暴力贪心发现过了,接下来看上去只需要一个动态区间 k 大值以及一个动态二维区间 min 就行了。怎么输!然后我 3h 树套树没调出来,遗憾离场。
赛后得知树套树其实也过不去,需要整体二分。并且树套树连 70 都没有,感觉这个 T3 太幽默了。
Round 9
开场发现 T1 光 \(k=0\) 都很难写,\(k=1\) 想必不能做,于是先跳了。
然后看 T2,发现拆贡献以后是个签,乱写了一下过了。时限 5s 跑了 300ms 还是挺幽默的。这时大概 1h。
T3 刚开始大概只会一个 min_25,观察了一下发现一个抽象做法,猜了一下能分析出 \(O(\sqrt n\log n)\) 的复杂度,写了一下好像真的是这个量级的。
于是感觉赢了,把这个做法实现了出来,结果常数过大连 \(10^{14}\) 都要跑 5s,喜提 min_25 筛的分。
卡常卡到了 11 点发现不能要了,于是思路打开,发现好像直接做就是 \(O(\sqrt n\log n)\) 的!并且常数非常小!写了一下 \(m=0\) 发现能过 \(10^{14}\),然后写了一下 \(m=1\) 直接一下过了 \(63\)。
发现 \(10^{14}\) 其实只跑了 400ms,所以 \(10^{15}\) 应该随便跑,改了一下过了最后一个包。
但是 sub9 拼尽全力无法战胜了!接下来一个小时卡进了 3.3s,但是并没有什么用,遗憾离场了。
本来觉得大家 T1 会获得一定的暴力分,但是好像大家没几个想去写这个 dirty work,于是排名还能看。
月亮的背面是粉红色的
首先你要会 divcnt1,否则在胡策 OJ 上无法通过。
后面待补。
Round 10
开场看 T3 发现是个签,40min 过了。
然后觉得 T2 很能做,对着特殊性质 A 做了 1.5h 啥都没做出来,于是开始打表,差分之后发现了一点规律,感性理解一下会了。在 4h 的时候过了 \(75\)。剩下 \(25\) 因为我的式子比较难看所以没看出来怎么优化。
然后 T1 有巨大多暴力分,但是没写完,喜提 \(60\)。
看榜发现 T1 被大家薄纱了!
计算几何
我觉得这个题很牛!
首先考虑 \(B_i=0,|A_i|\leq 10^6\) 的情况,这时如果区间长度大于 \(\sqrt A\) 根据生日悖论期望答案是 \(0\)。所以只需要搓个暴力跑比较小的部分就行了。
考虑扩展这个想法。如果我们能找出前 \(k\) 小的点对,那么对于一个询问,如果包含了某个点对就会得到答案,否则用暴力去做。写一下发现 \(k=O(n)\) 的时候能过。
首先我们发现,对于两对点对 \((i_1,j_1),(i_2,j_2)\),记它们的距离为 \(w_1,w_2\),如果满足 \(i_1\leq i_2\leq j_2\leq j_1,w_2\leq w_1\),则前一对点对是没有用的。
那么如果我们将
待补
Round 11
开场发现 T3 楼房重建一下就没了,T1 有点困难,T2 有点类欧。这时候 0.5h。
先花 1h 写了一下 T3,发现群里大家怀疑这个题数据错了,于是开始拟合出题人怎么错了,发现是开 long long 自然溢出就好了,比较幽默。
然后看了看 T1 发现是对于每个连通块找直径中点然后变成点分治板子,写了 1h 拿到了 95,然后卡了 1.5h 的常还是 95,红温了。
看了 T2 去吃饭,发现 T2 是 DSU 和类欧区间查询的二合一题,先写了个 DSU,写完发现没时间写类欧区间查询了,于是拼了点暴力跑路了。
最后被大家大胜了!
联通块
感觉这题最有教育意义的是教会了我怎么数联通块。
考虑一个联通块的直径 \(u\sim v\),假设其中点为 \(p\),则以 \(x\) 为圆心,半径为 \(r\) 的圆能包含这个联通块当且仅当 \(dist(x,p)+\frac{dist(u,v)}{2}\leq r\)。
求出这个直径可以用 st 表区间查询维护,剩下变成一个点分治板子题。不知道为什么胡策 OJ 上 sort 特别慢,在比较大的时候使用基数排序可以获得比较好的优化效果。
Round 12
打 ICPC 去了,不过 lhx 怎么开场前半个小时还在卷互测😡
Round 13
因为吃早饭迟到了,致敬传奇小粉兔。
看题发现 T1 有点困难,T2 大概优秀的拆分卡卡常就没了,T3 不是很会但是很眼熟。
先写 T1,发现可以只有前缀加,然后就大概变成了一个树剖题,但是树剖上要维护一些奇奇怪怪的标记,写了 2.5h(为啥这么久?)过了。
然后看 T2,先写了个 SA,然后回忆了一下优秀的拆分怎么做。写完交上去发现它把我 2log 的 SA 卡掉了🤡,50min 的时候过了。
去写 T3,发现我大概只会一个普及组格雷码和一个普及组爆搜,先写了获得 36 分然后把爆搜挂在那里跑 \(n=6\)。思考了一下 \(n=6\) 怎么构造发现会了一个奇奇怪怪的构造方法,大概是 \(O(2^nn)\) 的,没写完遗憾离场了。
胡策榜前面全是精英培训,我们的胡策正在蒸蒸日上!
最后发现 T3 我之前做过,太幽默了。
线段树与区间加 by zdj
首先一次对于区间 \([x,y]\) 加 \(z\) 可以转化成先对区间 \([1,y]\) 加 \(z\),然后对区间 \([1,x-1]\) 减 \(z\),所以我们现在只需要考虑一个前缀加法。并且线段树上一个区间的区间和可以用子树内懒标记表示出来,所以可以将区间和的贡献拆到懒标记上。
假设我们现在要给前缀 \([1,x]\) 加 \(w\),则在线段树上找到最大的右端点为 \(x\) 的节点,将其父亲记作 \(u\),然后在 \(u\) 到根的链上把标记给推了。定义一条链的“左链”是所有这样的点 \(v\),满足 \(v\) 不在这条链上、\(v\) 是左儿子且 \(v\) 的父亲在这条链上上,类似的定义右链。
考虑进行一个树剖,每个点维护当前节点的懒标记 \(g\),以及从当前点到链底的左、右链要加上多少懒标记标记 \(f_l,f_r\)。
对于一次区间加法,从上到下处理。每次相当于要将某条链的一个前缀的 \(g\) 转化成 \(f_l\) 与 \(f_r\),将 \(f_l\) 区间加,并且对于接下来要推的链将懒标记显式地推下去。注意到 \(g\) 只会 \(O(n\log n)\) 次给某一个地方赋值,并且每次处理的是一段前缀,所以暴力转化就是对的。\(f_l,f_r\) 使用树状数组维护,时间复杂度 \(O(n\log ^2n)\)。好像跑得还挺快。
字符串 by hfy
首先有个唐唐调和级数分块做法,剩下的等我学了 Runs 再补。
格雷码 by fsz
原题,感觉这个增量挺抽象的。
Round 14
第一眼看到 T1 的时候觉得很神秘,T2 更为厉害,T3 感觉是唐唐点分题。
先手玩了一下 T1 感受到了奇偶分层,然后写了一个发现喜提 40。于是尝试思考一下哪里错了发现啥都思考不出来,最后搭了个拍发现是写假了🤣,这时候 1h40min。
然后想了一下 T2 发现除了最基础的东西啥都不会,于是先给 T3 写了。到 11:00 左右写完交上去发现喜提 85,过了最后几个包没过 \(n\leq 10^4\),查了一下发现并查集合并顺序不对,数据和我都有点幽默。
然后开始坐牢 T2,把生成函数写出来之后发现我不会二元 GF 一点。最后发现 25 分暴力还是能要的,写了 20 之后发现最后 5 分不能要了。很喜欢一句话:5分谁写,于是直接开摆。
最后发现大家都不想写最后 5 分,于是有足足 13 个 220,但是有个精英培训老哥写出来了那 5 分获得 rk1,于是又变成精英培训互测了。
Round 15
刚开始感觉 T1 40 是简单的,但是后面一点不会。T2 好像是 NFLS 搬过的哪个题上树。原题我记得已经 *3000+ 了,太困难。T3 刚开始以为能求逆是 shaber 题,后来发现不能,于是又不会一点。
这时候感觉这场三个困难题,于是打算先写 T1。先写了个暴力观察了一下,发现最后的 DP 部分形式还是比较好的,一次求逆就能做了。但是预处理系数的部分好像是我大战 2h 失败的某个坐标系走路类似题,这下感觉要倒闭了。
硬着头皮做下去,然后发现其实还是好做的?分治 NTT 之后可以截断,复杂度就对了。写了一下,在 2.5h 的时候通过了这个题。
然后去思考了一下 T3,发现分治之后有一个 \(O(nm\log ^2n+qm\log n)\) 的做法,看上去能过挺多。正准备开始写的时候发现差分一下就可以做到 \(O(nm\log ^2n+qm)\) 了,于是写完之后卡卡常就过了。
这时候大概 1.5h,起码能给 T2 写个链了。回忆了一下原题怎么做,然后发现上树之后跨过 LCA 的区间可以记忆化解决,复杂度其实是对的,最后在 12:20 通过了。
本来以为能 AK 很多,但是周日的胡策显然没几个人打,于是混到了 rk1。
药水
考虑倒着做,维护一个 \(x\) 表示还没有处理的顾客的药水数量。当 \(x\leq 0\) 的时候就可以清空了。
假设能求出 \(f_i\) 表示一段长度为 \(i\) 的区间,只有最后 \(x\leq 0\),其余都满足 \(0<x\leq k\) 的概率。则将 \(f\) 截取前 \(m+1\) 位,然后分治 NTT/求逆就能求出最终的概率了。于是问题变成预处理 \(f\)。
考虑直接去用分治 NTT 模拟这个坐标系走路的问题。大概是需要实现已知某个 \(x=p_l\) 坐标上 \([l,r]\) 区间的值,要将其转移到 \(p_r\),并且将超出上界的舍弃,小于下界的计入 \(f\)。
首先在区间 \([l,r]\) 中找到不会超出的区间,一次卷积转移。然后将这些系数先转移到中点,然后中点再转移到右边。这两部分可以递归下去做。因为每个区间内需要递归下去的数量不会超过 \(6\) 倍区间长度,所以复杂度是 \(O(n\log ^2n)\) 的。
字符游戏
考虑链上怎么做,大概是你需要预处理每个点往后最近的某个权值的点,以及这个区间的 SG 值是多少,并且预处理相关的倍增和前缀和。查询的时候只需要枚举第一次使用了什么,然后利用预处理的倍增计算 xor 和即可。
然后考虑放到树上怎么做,随便定一个根做这个过程,查询的时候问题在于跨过 LCA 的那段区间我们没有预处理过 SG 值,也不能预处理因为可能的点对数是 \(O(n^2)\) 的。但是我们发现对于每个询问,这样的跨过 LCA 的区间端点只可能是某个询问端点到 LCA 上某种值最靠近 LCA 的点,因此这样的区间只有 \(O(|\Sigma|^2)\) 个,通过合理记忆化可以将复杂度变为 \(O((n+q)|\Sigma|^2\log n+q|\Sigma|^3)\)。
但是有个很大的问题是我这样都跑不进 1s,yxh 甚至写了个单次询问 \(O(|\Sigma|^3\log n)\) 的都随便 1s-,怎么会是呢?
子集和
考虑将询问差分成询问一个前缀 \([1,x]\) 和一个后缀 \([y,n]\) 的答案之和。如果我们能找到一个点 \(p\) 满足 \(x\leq p<y\),并且处理出 \([1,p]\) 区间内去掉 \([1,x]\) 中一个点的 dp 值之和,\([p+1,n]\) 区间内去掉 \([y,n]\) 中一个点的 dp 值之和,则可以 \(O(m)\) 合并这两个 dp 状态来得到答案。
考虑去分治解决这个问题。对于分治区间 \([l,r]\),中点 \(mid\),处理所有 \(l\leq x<y\leq r\) 的询问。这时通过上层分治传下来一个 \(pre\) 和 \(suf\) 表示 \([1,l-1]\) 去掉一个的信息和,以及 \([r+1,n]\) 去掉一个的信息和,以及 \(prew,sufw\) 表示 \([1,l-1]、[r+1,n]\) 不去掉一个的信息,然后通过分治对于每个 \(l\leq i\leq mid\) 求出区间 \([1,m]\) 去掉 \(i\) 的信息,\([mid+1,r]\) 也是一样,做前缀和之后就能回答所有满足 \(x\leq mid<y\) 的询问了。
对于其余询问分治到两边去做,并且容易同时更新 \(pre,suf,prew,sufw\),时间复杂度 \(O(n\log ^2m+qm)\)。
Round 16
最后一场三个题的胡策了!
T1 一开始连 20 分暴力都不会,仔细思考一下发现还需要编一个判定条件才能过 20,太毒瘤。T2 感觉和去年的那个题没啥区别啊?zyf 挺会出题,并且刚开场的时候数据还是错的。T3 感觉是典中典了。
于是先做 T1,发现需要上个高维前缀和才能过 40,精细实现一下才能过 50,太困难。做了大概 1h 才发现模数是 \(2^{32}\),然后才感觉可做一点。
这时候快 2h 了,出题人也改完数据了。先给 T1 写了个暴力,然后把 T3 写了,拉了份去年我 T2 的代码交了过了 50,然后改了改过了。
接着看 T1 的时候发现在 \(\geq 16\) 位的时候只能有一个自由位置,其余位置都是固定的,\(<16\) 位的可以状压 DP,于是就有一个 \(O(n^2\sqrt p\log p+qnk)\) 的做法和一个 \(O(qn\sqrt p\log p)\) 的做法,拼一拼暴力能有 80,于是先写了后面那个,在吃饭前拿到了这档分。
吃饭的时候想了想发现系数可以表示成三个比例固定的数列之和,于是都可以一次预处理出来,就是 \(O(n\sqrt p\log p+qk)\) 了,写了写卡了卡常在还有 8 分钟的时候过了。
因为这个究极神秘 T2 没人打胡策了,于是喜提 rk1。
数位 DP by shz
好像有个杂糅了 std 和我的根号分治的更优做法,等有空了补。
Round 17
开始之前通过合理排除得到一个是 cxy 的一个是达子的,但是看了两个题感觉两个题都是 cxy 的,最后发现有一个是 alpha 的!
先看了 T2 发现可以用欧拉数通项公式解决 \(k=2\) 的做法,但是可以喜提 5pts,说明这个题一半可能和欧拉数没啥关系一半可能是不可做题,于是先跳了看 T1。
看 T1 题目背景其实被戳到了,这个 trick 我第一次在 Codeforces Global Round 18 上碰到,场上看笋子很快就过了,但是我大战 1h 被打爆了。赛后得知这个长剖方法还是感觉很精妙的。之后再做了更多的关于选长链的题后,这个 trick 也就泯然众 trick 了。
然后推了一会儿会 \(O(n^4)\) 了,于是先写了一个,调了巨久,交了一发获得了 80 分。然后发现主要复杂度在一个卷积,写成纯卷积形式就过了。改成 \(16\) 轮一次取模甚至跑进 0.6s 了,有点幽默。
这时候才过了 2.5h,优势在我!然后看 T2,发现好像容斥一下分治 NTT 就做完了,于是先写了个暴力,然后调红温了,调到 12:45 才调出来暴力,贺了个 NTT 板子在结束前极限通过。
出榜一看有三个 AK 了,流泪。