做题笔记26

11.21

做了一下午+一晚上的 ulr

模拟赛

T1

啦啦啦啦啦啦

T2

噜噜噜噜噜噜

T3

哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!哇袄!

T4

不会。

#1012. 【ULR #3】储存处无

考虑每个置换环在最小点处反过来,可以做到 \(\mathcal{O}(n^2)\)

有一些冗余的变量,存下来几个关键点的位置,如果环上经过了关键点就 break,复杂度不知道,但是他不可能对着卡

其实只需要每个点随机一个哈希值,把哈希值最小的地方当作代表元,期望线性对数

11.22

屎!?

P10356 [PA 2024] Splatanie ciągów

考察如何计算两个单调序列 \(A\)\(B\)\(f\) 值,不妨设 \(|A|\ge |B|\),那么现在就是要向 \(A\) 中塞一些 \(B\) 进去,首先你 \(f\) 是下界肯定是 \(\left\lceil\frac{|A|+|B|}{|B|+1}\right\rceil\),这里肯定能构造到这个下界,因为你考虑,如果在 \(a_i\)\(a_{i+1}\) 中间塞了一个 \(b\),那么你可以把这个 \(b\) 往左或者往右调整一下

然后对于一般的情况,你肯定是考虑找到 \(A\)\(B\) 的那些单调区间,因为这些东西互不影响,设 \(A\) 拆出来的区间长度序列是 \(a\)\(B\) 拆出来是 \(b\),设 \(g(l,x)=\min_{\left\lceil\frac{l+r}{r+1}\right\rceil\le x}r\),实际上有 \(g(l,x)=\left\lfloor\frac{l-2}{x-1}\right\rfloor\),那么 \(f(A,B)=x\) 的充要就是 \(\sum g(a_i,x)\le |B|\)\(\sum g(b_i,x)\le |A|\),你发现这两个条件至少满足其中一个,于是 \(a\)\(b\) 分别算出来 \(=x\) 的答案后再减去总方案数就行了

假如求出了 \(\sum g(a_i,x)=y\),那么只需要数 \(B\) 的长度大于等于 \(y\) 的区间个数,这个东西是 \(\sum_{i=y}^{m}(m-i+1)\),是一个关于 \(i\) 的二次函数,考虑 \(\sum \left\lfloor\frac{a_i-2}{x-1}\right\rfloor\),枚举所有的 \(x\),你发现 \(a_i-2<x-1\)\(a_i\) 的贡献永远是 \(0\),所以只有 \(\mathcal{O}(\frac{n}{x})\) 个有用的 \(a_i\)

后面的全是石,课件说可以写个暴力出来再展展式子,0 人愿意去想细节吗

复杂度调和级数 \(\mathcal{O}(n\log n)\)

P11814 [PA 2014] 串串 / Ciągi

考虑 \(k=5\),其他的类似

先让 \(B\) 的每一位都取到 \(A\) 每一位的中位数,然后在这个基础上调整,记 \(D_i=\text{dist}(A_i,B)\),现在考虑第 \(j\) 位,记 \(v_1\sim v_k\)\(A_1\sim A_k\)\(j\) 为排过序之后的数组,考虑 \(B_j\) 减小的情况,另一种情况完全对称,当 \(B_j\)\(v_3\) 调整到 \([v_2,v_3)\) 时,\(v_1,v_2\) 对应的 \(D\) 就会减小 \(1\),其他的 \(D\) 会增加 \(1\),当 \(B_j\)\(v_2\) 调整到 \([v_1,v_2)\) 时,\(v_1\) 对应的 \(D\) 会减小 \(1\),其他的 \(D\) 会增加 \(1\)

你发现前一种操作一定比后一种操作优,于是可以看作有 \(v_3-v_2\) 次减小 \(v_1,v_2\)\(D\),有 \(v_2-v_1\) 次减小 \(v_1\)\(D\),肯定是先操作前者再操作后者

省去 \(B_j\) 往大调整的讨论,考虑直接建图,问题就变成了,给你一张五个点的图,每个点上有一个次数限制,每个边上也有一个次数限制,操作一条边即将边上两个点 \(-1\),其他的点 \(+1\),操作单点即为将那个点 \(-1\),其他的点 \(+1\),你发现操作的任意两条边一定有交,否则一定不优,于是会被操纵的子图要么是菊花,要么是三元环,令 \(d_r\) 为中位数对应的答案

对于菊花:

考虑二分一个 \(mid\),假如我们总的操作次数为 \(s\),那么不妨先把所有点都加上 \(s\),然后每次操作就相当于给某个点 \(-2\) 或者给某条边上两个点 \(-2\),肯定要把最大的放在根,然后我们的策略就是每个叶子一直操作直到 \(d_i\le mid\),最后如果根的 \(d_i\) 仍然 \(>mid\),就把和根有关的操作尽量操作了,直到操作不了为止

你发现这样我们要枚举 \(s\),太报了,有结论,设根为 \(r\),则有,\(s\in\{d_r-mid,d_r-mid+1\}\),这个下界是显然的,现在考虑怎么说明这个上界,当 \(s\ge d_r-mid+2\) 时,我们考虑撤销其中两个操作,如果有两个操作 \((r,a)\)\((r,b)\),由于你此时有 \(d_r\le s+mid-2\),所以你把这两个操作撤销了,\(r\) 处仍然合法,\(a,b\) 仍然合法,其他的点只会变得更优,如果有两个操作 \((r,r)\)\((r,a)\),我们把他撤销了, \(a\) 仍然合法,其他点更优,如果只有 \((r,r)\),撤销两个也是没问题的,于是剩下的只能是 \((r,a)\) 和其他的单点,由于 \(d_a\le d_r\),如果 \(r\) 合法了,\(a\) 一定合法,所以我们撤销 \((r,a)\) 也是可以的

对于三元环:

同样二分答案,枚举三元环的点 \(a,b,c\),设边 \((b,c),(a,c),(a,b)\) 分别操作了 \(A,B,C\) 次,总共操作了 \(s\) 次,那么有:

  • \(d_a-s+2A\le mid\)
  • \(d_b-s+2B\le mid\)
  • \(d_c-s+2C\le mid\)

即:

  • \(A\le \frac{mid+s-d_a}{2}\)
  • \(B\le \frac{mid+s-d_b}{2}\)
  • \(C\le \frac{mid+s-d_c}{2}\)

于是 \(s\) 合法当且仅当 \(f(s)=\min(A',\left\lfloor\frac{mid+s-d_a}{2}\right\rfloor)+\min(B',\left\lfloor\frac{mid+s-d_b}{2}\right\rfloor)+\min(C',\left\lfloor\frac{mid+s-d_c}{2}\right\rfloor)\ge s\),那么 \(f(s)\) 一个分段函数,只有 \(\mathcal{O}(1)\) 段,你肯定是取到每个段的首尾,那么你只需要 check 这 \(\mathcal{O}(1)\) 个位置是否合法就做完了

P8332 [ZJOI2022] 面条

先把 \(\frac{1}{2}\) 放到最后考虑,可以做光速幂

发现你操作一些次之后整个序列就变得比较有规律,若 \(n=(2m+1)2^k\),那么操作 \(k\) 次后整个序列会变成 \(m\) 个长为 \(2^{k+1}\) 的段和一个长为 \(2^k\) 的段,且之后整个序列的形态并不会变,变的只有数值,设这些值为 \(a_0\sim a_m\),那么你一次操作就是 \(a'_0\gets a_0+a_m,a'_1\gets a_0+a_{m-1},a'_2\gets a_{m-2}+a_1,\cdots,a'_m\gets 2a_{\left\lfloor\frac{m}{2}\right\rfloor}\),你发现相邻两项都有一个相同的,于是考虑差分,记为 \(b_1\sim b_m\),现在考虑其差分数组的变化,也就是变成了 \(-b_m,b_1,-b_{m-1},\cdots\)

你发现这个东西很难搞,此时有一个魔法操作,你把 \(b\) 补全到 \(b_1,b_2,\cdots,b_m,-b_m,-b_{m-1},\cdots,-b_{1}\),称其为 \(c\),那么一次操作就是 \(c'_{2i\pmod {2m+1}}\gets c_i\),这是一个置换,而且所有置换环长都是 \(2\)\(2m+1\) 意义下的阶的约数,你一次操作就是沿着一个边移动,于是我们可以把 \(k\)\(\delta_{2m+1}(2)\) 取模,此时 \(k\) 就只有 \(\mathcal{O}(n)\) 了,但是要求 \(\mathcal{O}(1)\) 查询,考虑同时求出所有 \(k\) 的答案,我们要求的是 \(a'_0+\sum_{i=1}^{x}c'_i\),对每一个环分别做,后面那个是 \(ans_k=\sum_{i=0}^{cyc-1}c'_i\times p_{i+k\pmod {cyc}}\),其中 \(cyc\) 是环长,\(p_{i}\)\(i\) 最后是不是在给出的 \([1,x]\) 中,做循环差卷积即可,但是询问的时候还是有点难受,因为你每个环都要对 \(\mathcal{O}(n)\)\(k\) 做贡献,但是你可以把环长相同的放到一起贡献,这样复杂度就是 \(\mathcal{O}(nd(n))\)

我们还要算 \(a_0'\),你观察到 \(a_m'+\sum_{i=0}^{m-1}2a_i'\) 每次翻倍(?,那么这个和容易维护,剩下的只需要再维护 \(\sum_{i=1}^{m} c_i\times t_i\) 了,\(t_i\)\(c_i\) 对应的系数,这个也是容易维护的,也做一个差卷积即可

总复杂度 \(\mathcal{O}(n(\log n+d(n))+q)\)

P13342 [EGOI 2025] Wind Turbines / 风力涡轮机

把黑点都缩起来,考虑加树边的过程,当某个时刻,两个黑点在同一连通块中,这个树边就没必要加了,那么所有被删掉的树边,对应 kruskal 重构树上两个黑点的 LCA,于是可以启发式合并拉支配点对,数点做到 \(\mathcal{O}(n\log^2n)\)

P9601 [IOI 2023] 最长路程

首先考虑问一下 \(1\) 和其他所有点的边,那你发现所有点最多被分成俩连通块,因为与 \(1\) 没边的所有点构成一个团,其他点都和 \(1\) 有边

难以想到,维护两个链,初始都只有 \(0\)\(1\),第一个链头为 \(u\),第二个链头为 \(v\),每次加入一个点 \(i\),询问 \((i,u)\)\((i,v)\),如果他和其中一个有边,直接加进去就行了,否则,\(u\)\(v\) 一定有边,这时候我们把 \(u\)\(v\) 接起来,当成一条链,把 \(i\) 这个点当成另一条链

最后全都问完了,考虑把俩链拼起来,若第一条链首尾分别为 \(s_1,t_1\),第二条首尾分别为 \(s_2,t_2\),那么问 \((s_1,\{s_2,t_2\})\)\((t_1,\{s_2,t_2\})\),如果问出来了一个,再问一次就能问出来连边了,否则一定是两个环,这时候我们从哪个地方把这两个环断开都是合法的,只需要问出来一条边,可以直接二分

这样大概是 \(2n+2\log n\),考虑继续优化,把他变成 \(1.5n+2\log n\)

考虑用最多三次操作问出来 \(i\)\(j\)\(u,v\) 的边

  • 先问 \((i,u)\),若有边,和上面一样做就行了
  • 否则,考虑问 \((i,v)\)
    • \((i,v)\) 有边,考虑此时 \(j\) 必然和 \(u,i\) 中的一个有边,于是再问一次就行了
    • \((i,v)\) 无边,此时 \(u,v\) 一定有边,问 \((i,j)\),如果 \(i\)\(j\) 有边,那么可以把 \(i\)\(j\) 缩起来,\(u\)\(v\) 缩起来,否则 \(j\) 一定同时和 \(u,v\) 有边,把 \(u,j,v\) 缩起来,\(i\) 单独成链即可

这样总次数是 \(1.5n+2\lfloor\log_2 n\rfloor\)

11.23

11.24

11.25

P9602 [IOI 2023] 足球场

观察一下,发现不能存在凹形,于是可以说每一行每一列都要是一个连续的区间,于是你可以一行一行考虑,每一行枚举一个区间,但是你发现如果有两个区间相交但不包含也是不行的,于是所有的区间都是互相包含的,那么可以直接 dp,记 \(f_{u,d,l,r}\) 表示第 \(u\) 行到第 \(d\) 行,当前最窄的区间是 \([l,r]\),每次往 \(u-1\)\(d+1\) 转移

考虑优化,你发现所有区间都在一条中轴线上,也就是说存在一个 \(x\),满足任意时刻 \(x\in[l,r]\),那么可以记状态 \(f_{u,d,x}\),你转移的时候,\(x\) 所对应的 \([l,r]\) 肯定是取尽可能大的,这个东西的限制只和 \(u,d\) 有关,于是可以得到 \(\mathcal{O}(n^3)\) 的做法

进一步,考虑把第一维优化掉,因为你发现合法的 \(u\) 可以通过 \(d\)\(x\) 算出来,你向下转移时,此时 \(x\)\(l\) 不变,那么只有第 \(d+1\) 行的限制,你向上转移时,算出来 \(x\)\(d\) 行对应的 \([l,r]\),从 \(f_{d,l-1}\)\(f_{d,r+1}\) 转移到 \(f_{d,x}\) 即可,再算上往上若干行的 \([l,r]\) 的贡献

把所有 \((d,x)\) 按照对应的 \(d-u\) 排序转移即可,复杂度 \(\mathcal{O}(n^2)\)

posted @ 2025-11-20 21:33  fqmzwmhx  阅读(22)  评论(0)    收藏  举报