record 4.22-4.26
[ARC176 C] Max Permutation
这个题并不困难,但是场上没调完。
注意到这个 \(\max(P_{a_i},P_{b_i})=c_i\) 可以转化成 \(P_{a_i},P_{b_i}\le c_i\land(P_{a_i}=c_i\lor P_{b_i}=c_i)\)。
我们可以先做前面那个条件,把每个 \(P_i\) 的上界给出来,然后容斥算后面这个东西。
你考虑怎么算后面这个东西。全钦定了之后就是 \(P_i\le lim_i\) 的形式,你可以从后往前,依次钦定每个数填到哪里来算方案,这样你的贡献就只跟当前位置有多少个数被 gank 到了 -1 位置有关。
注意到,如果一个点 \(u\) 接了两个 \(w\) 的边,那么这个点就必须是 \(w\) 了。
细节可能稍微有一些。
[CF1957 E] Carousel of Combinations
这个题吧,其实也不难,当时有点太困了=_=。
简单来说就是你发现如果 \(i\in[kj,(k+1)j)\) 的话,那么这时它的答案就是 \(k(j-1)!\bmod j\)。然后你发现这样一个段全都加起来就会变成 \(0\),所以只有最后一个段是有用的。
然后因为每次加的数都一样嘛,你可以维护 \((sum,add)\) 表示当前和是 \(sum\),接下来要加 \(add\),然后你只需要在断点处修改 \(add\) 就可以了,这样的断点显然只会有 \(O(n\log n)\) 个。
有人说了什么威尔逊定理,跟这个其实关系不大。不过有时间可以看一下。
额好吧是有用的,因为你发现你算不了 \((j-1)!\bmod j\)。
不过根据威尔逊定理 \((p-1)!\bmod p=p-1,p\in Prime\) 而当 \(p\) 既不是质数也不是 \(4\) 的时候,\((p-1)!\bmod p=0\)。
[ARC176 D] Swap Permutation
它要算 \(\sum_Q[valid(P,Q,m)]\sum_i |Q_i-Q_{i+1}|\),我们考虑把它拆开,\(\sum_i\sum_{Q_i}\sum_{Q_{i+1}}|Q_i-Q_{i+1}|cnt(P,i,Q_i,Q_{i+1},m)\)。
而 \(cnt(P,i,Q_i,Q_{i+1},m)\) 其实只跟最开始的 \([P_i=Q_i],[P_{i+1}=Q_{i+1}]\) 有关。
具体来说,设 \(dp_{i,0/1/2,0/1/2}\) 表示你目前已经进行了 \(i\) 次交换操作,并且两个数在 无关位置/自己的位置/对方的位置。
这个随便推推就会了。
这个题总之就是,把贡献拆开之后,你发现特别对称,所以事实上你要算的东西是很少的。
[ARC176 E] Max Vector
nm,flow。
感觉我可能需要练习一下到底什么东西是 flow 可以解决的。
[pkuwc2024] 栈
首先仍然跟 [JOISC 2021 D1] 饮食区 类似,我们离线转成对栈的编号扫描,然后用数据结构维护时间维,操作变成激活和撤销。询问变成询问一个时间点前的所有操作之后,栈的一个前缀的和。
注意到,这些操作当中有很多是没有用的。具体来说,最后一次把整个栈删空之前的操作没有用,第一次加到 \(p\) 位置并且之后没有再删掉 \(p\) 的操作之后的操作没有用。而这两次操作之间的所有操作都会“彻底”执行,我们考虑如果告诉你这样的 \([l,r]\) 你会不会算和。
你发现每个段的贡献变化情况很复杂。但你发现 \((mid,r]\) 对 \([l,mid]\) 的影响是有限的,我们只需要记录后面这些操作完之后要向前面借多少个就行了。
具体来说,这是单侧递归线段树,我们需要实现一个函数 \(\text{calc}(u,x)\) 表示假设栈内最开始有无限个元素,计算 \(u\) 节点操作之后的结果,并且后面还接了一次删 \(x\) 个元素的操作。
你考虑它的左右儿子,如果右儿子最后剩的元素够删 \(x\) 个,那就递归到右儿子,左儿子只需要承担右儿子带来的删除操作。而如果右儿子不够删,那右儿子就不用递归了,左儿子需要承担右儿子的删除操作再加上 \(x\) 剩下的部分。
使用这样的操作可以让我们计算 \([l,r]\) 的操作之后整个栈的和。问题变成如何计算 \(l,r\)。
你考虑这个东西是有单调性的,具体来说是“这次操作之后是否存在一次删空操作”有单调性,而这个东西可以通过计算之后最多删了多少个以及当前栈的大小来二分出来。
类似地,计算 \(r\) 也是有单调性的。
这样,我们可以 2 log 解决这个题。
额但是感觉我的理解还是很浅。
MX 的一个题
过的人好多啊。
给定值域在 \(1\sim n\) 的数组 \(A_n\),给定 \(1\le L\le R\le n,S,T\),定义 \(f^{(k)}(i)\) 为
\[f^{(k)}(i)=\begin{cases}f^{(k-1)}(A_i),&k\neq 1\\A_i,&k=1\\\end{cases} \]对每个 \(i\) 和 \(L\le k\le R\),连边 \(i\to f^{(k)}(i)\)。
如果 \(S\) 能到达 \(T\),那么这个方案权值是 \(1\),否则是 \(0\)。
让你对所有可能的输入,共 \(n^n\times\frac{n(n+1)}{2}\times n^2\) 种,求出它们的权值和。
\(n\le 10^5\)。
是很麻烦的讨论呢。好像还有一点别的东西。
如果 \(s,t\) 均在环上。
如果 \(L\neq R\),那赢麻了,你一定可以到达。\(\sum_{m=1}^n\binom{n}{m}(m-1)!n^{n-m}\frac{m(m+1)}{2}\)。
如果 \(L=R\),能到就要求 \(\gcd(L,m)\mid d\),其中 \(d\) 是两点的距离,\(m\) 是环长。那其实就是把环分成了模 \(\gcd(L,m)\) 的剩余系,每个剩余系内互相可达。
考虑到最后一部分跟前面独立,我们单独拎出来算。
对于所有的 \(d\) 而言,符合条件的 \(x\) 一共有 \(O(n\log n)\) 个,我们对每个 \(d\) 求出每个 \(x\) 的答案,然后你发现这是一个 Dirichlet 前缀和。总之复杂度很对。
如果 \(s,t\) 一个在链上,一个在环上。那显然是 \(s\) 在链上。
如果 \(L\neq R\) 是一样的。\(\sum_{a=1}^n\sum_{b=1}^n\binom{n}{a+b}(a+b)!b=\sum_{b=1}^nb\sum_{x=b+1}^n\binom{n}{x}x!\),这个显然还是把后面的独立出来算就行了。
如果 \(L=R\),那你发现 \(s\) 进到环上的第一个点是确定的,可以转化成都在环上的情况。这个大概就是你在上面乘一点东西就行了,懒得写了。
如果 \(s,t\) 都在链上。我们可以分成两部分,第一部分是统计距离为 \(d\) 的点对的个数 \(f_d\),第二部分是统计能让它俩到达的 \(L,R\) 对数 \(g_d\)。
\(f_d\) 我们考虑统计长度为 \(k\) 的 \(\rho\) 形方案数为 \(h_k=\binom{n}{k}k!n^{n-k}\),然后你发现,如果我们钦定 \(\rho\) 的终点为 \(S\),那么 \(T\) 能选出来就等价于链长 \(>d\),而你发现对于不同的链长,方案数都是一样的,所以 \(f_d=\sum_{k=d+1}^nh_k\times\frac{k-d-1}{k-1}\),总之这部分并不难算。
然后是 \(g_d\)。你发现这要求 \(R\lfloor\frac dL\rfloor\ge d\),也就是 \(R\ge\lceil\frac{d}{\lfloor d/L\rfloor}\rceil\)。
这个你整除分块,复杂度 \(O(n\sqrt{n})\)。
我们就做完了?
上面的式子错了一堆,但是就是这个意思。

浙公网安备 33010602011771号