专栏文章

P11661 无聊

P11661题解参与者 10已保存评论 14

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
14 条
当前快照
1 份
快照标识符
@miqj15jz
此快照首次捕获于
2025/12/04 05:36
3 个月前
此快照最后确认于
2025/12/04 05:36
3 个月前
查看原文
考虑最值分治,当然也可以用笛卡尔树,这两个东西本质一样。
以下内容视 n,Vn,V 同阶。
先考虑 5050 分的做法:
假设当前分治的区间为 xyx\sim y,令 xyx\sim y 最大的 aia_iaka_k。枚举小的一边(这里只讨论枚举左边,右边的同理),这时固定了 bl,akb_l,a_k,变为求 mm 次:krk\sim rblbi(modak)b_l\equiv b_i\pmod{a_k}ii 的个数。存成 mm 个询问,形如 l,r,x,yl,r,x,y,求 lrl\sim r 中模 xxyybib_i 的个数。
根号分治跑询问即可,时间复杂度 O(nnlogn)O(n\sqrt n\log n)
对于 100100 分的做法:
思考为什么最值分治枚举小的一边时间复杂度是 O(nlogn)O(n\log n)。因为其对左区间长度与右区间长度取了最小值,这题也可以考虑这么优化。
假设当前分治区间短的一边的长度为 qq,对短边跑根号分治的时间复杂度为 O(qV)O(q\sqrt V)。若 qV>nq\sqrt V>n,显然不如暴力枚举另一边,那么就有:T(n)=max2kn{T(k1)+T(nk)+min{kV,n}}T(n)=\displaystyle\max_{2k\le n}\{T(k-1)+T(n-k)+\min\{k\sqrt V,n\}\},可得 T(n)=O(nV)T(n)=O(n\sqrt V)
时隔多日后补个证明,别打我
u=nVu=\frac{n}{\sqrt V}(这是函数内的 nn)。
T(n)T(n) 拆成(以下所有内容,默认 2kn2k\le n):
T(n)=max{maxku{T(nk)+kV+k(k1)2},maxku{T(k1)+T(nk)+n}}T(n)=\max\{\displaystyle\max_{k\le u}\{T(n-k)+k\sqrt V+\frac{k(k-1)}{2}\},\displaystyle\max_{k\ge u}\{T(k-1)+T(n-k)+n\}\}
考虑从其中弄出两个函数:
A(n)=maxku{A(nk)+k(k1)2+kV}A(n)=\displaystyle\max_{k\le u}\{A(n-k)+\frac{k(k-1)}{2}+k\sqrt V\}
B(n)=maxku{B(nk)+B(k1)+n}B(n)=\displaystyle\max_{k\ge u}\{B(n-k)+B(k-1)+n\}
对于 A(n)A(n) 绝对是 kk 越大越好,于是 k=uk=u,易证 A(n)=O(nV)A(n)=O(n\sqrt V)
易证 A(n)=B(n)A(n)=B(n)
考虑从 1n1\to n 计算 T(n)T(n),对于 nVn\le\sqrt V 有:T(n)=A(n)=B(n)T(n)=A(n)=B(n)
考虑代入法:
T(n)=max{maxku{A(nk)+kV+k(k1)2},maxku{B(k1)+B(nk)+n}}=max{A(n),B(n)}=O(nV)T(n)=\max\{\displaystyle\max_{k\le u}\{A(n-k)+k\sqrt V+\frac{k(k-1)}{2}\},\displaystyle\max_{k\ge u}\{B(k-1)+B(n-k)+n\}\}=\max\{A(n),B(n)\}=O(n\sqrt V)
终于结束啦。

评论

14 条评论,欢迎与作者交流。

正在加载评论...