做题记录 26.3.27

NFLS #P13198. 幽灵

预处理 \(zs_i\)\(zt_i\),分别表示 \(s\)\(t\) 对应后缀与 \(s\)\(\text{lcp}\)

预处理 \(t\)\(fail\) 树,及 \(ps_i\) 表示 \(s[1:i]\) 匹配 \(t\) 的最大长度

\(cp_i\) 表示 \(s[1:i]\)\(t\) 的出现次数,容易由 \(ps\) 得到

\(sml\) 表示 \(a\) 的前缀和

\(bps_i\) 表示 \(S[1:sml_i]\) 匹配 \(t\) 的最大长度,\(bps_1=ps_{a_1}\)\(bps_i\)\(bps_{i-1}\) 的基础上跳 \(fail\) 直到 \(zt_{bps_i+1}\ge a_i\) 或空,对于前一种情况 \(bps_i\gets bps_i+a_i\),后一种情况 \(bps_i=ps_{a_i}\)

\(bcp_i\) 表示 \(S[1:sml_i]\)\(t\) 出现且结尾于 \(S[sml_{i-1}+1:sml_i]\) 的次数,在 \(cp_{a_i}\) 的基础上跳 \(fail\) 树统计即可

对于一次询问 \([l,r]\),拆为 \(r\)\(l+|t|-2\),此时两个都要求出 \(t\) 在对应前缀中的出现次数

对于一个前缀,求出属于哪个 \(S[sml_{i-1}+1:sml_i]\),前面部分容易统计,后面部分容易统计,跨越部分统计方式类似求 \(bcp\)

此时时间复杂度 \(O(|s|+|t|+(n+q)h)\),其中 \(h\)\(t\)\(fail\) 树高,可以通过

实际上三处 \(O(h)\) 的都容易优化到 \(O(\log |t|)\)

代码

参考

NFLS #35449. 鳍握

显然每条鱼可以到达一个区间,处理出后对端点离散化

转化为每个区间内选择一个点,使得每个位置上点的数量的择 \(2\) 和最大

由于 \(\binom x2+\binom y2\le \binom{x+y}2\),若一个区间包含了选择点数最多的位置,则选择这个位置不劣

\(dp_{i,j}\) 表示区间 \([i,j]\) 的答案,钦定其最大值位置 \(k\),则所有 \([i,k]\)\([k,j]\) 的区间都选择 \(k\),左右两边划分为子问题

容易做到 \(O(\sum (nm+m^3))\)

代码

参考

NFLS #35448. 网购图

先考虑符号全相同的情况

按绝对值从小到大排序,可证最优情况下一个长度为偶数的前缀中左半和右半两两配对,剩余后缀和最小值配对

对于符号不全相同的情况,将正数和负数分离,分别按绝对值从小到大排序,显然正数内部没有连边,都连到负数的一个后缀中(且这段后缀长度不超过正数的长度),负数的前缀内部连边处理同上,后缀部分正负一一配对,多余的正数都和负数最小值配对

容易做到 \(O(\sum n^2)\)

代码

容易用多项式技术优化到 \(O(\sum n\log n)\)

参考

posted @ 2026-03-28 07:31  Hstry  阅读(1)  评论(0)    收藏  举报