2024.7 做题记录

409. P10704 救赎(Redemption)

不依赖 ai109 的做法。

bx 为有多少个 i 使得 ai=x

设一个阈值 B。当 maiaj>Baiaj<mB,可以直接枚举 aiaj 然后利用 b 数组统计。这部分时间复杂度为 O(mBlnmB)

maiajB 时,统计 maiaj 之和可以转化为对于一个整数 k[1,B],有多少对 (i,j) 满足 xmaiajxaiajm。可以排序后双指针统计。这部分时间复杂度为 O(nB)

总时间复杂度为 O(mBlnmB+nB)。取 B=350 可以通过。

410. P10716 【MX-X1-T4】「KDOI-05」简单的字符串问题

一个 A 合法的充要条件为:

  • AS1i 的一个 border;
  • AS1i 中不重叠地出现 k 次。

建出失配树后,发现合法的 A 在树上组成一条某个点 u 到根的链,且 ui 的祖先。因此我们若知道 u,答案就是 depu

考虑倍增求出 u。相当于要 check 这样一个问题:

  • S1u 的第 k 次不重叠出现位置是否 i

考虑预处理出每个前缀 S1u 对应的串在整个串中的不重叠出现位置。相当于每次找到一个位置后面第一个后缀,使得它与整个串的 LCP 长度 u,然后跳到它。跳的步数最多是 i=1nni=O(nlogn) 所以可以暴力跳。

一个后缀与整个串的 LCP 长度可以想到 Z 函数。用并查集维护链表的 trick,从小到大枚举 u,处理完 u 后把 zp=u 的所有位置 p 删了,使得处理到 u 时,并查集中 zpu 的位置为代表元。这样即可 O(α(n)) 求出一个位置后面第一个 p 使得 zpup

注意特判 k=1

总时间复杂度 O(qlogn+nα(n)logn)

411. CF1975F Set

412. CF1732E Location

413. CF1677E Tokitsukaze and Beautiful Subsegments

唉,套路题。

求出以每个 pi 作为最大值的区间范围 l[Li,i],r[i,Ri]。再找到全部 papb=pi 的位置 (a,b),那么同时包含 i,x,y 且是 [Li,Ri] 的子区间的区间 l[Li,x],r[y,Ri] 是合法的。

于是原问题变成了一个矩形覆盖矩形求和的问题。太困难。

但是发现矩形有交当且仅当它们从同一个 i 产生,所以可以对于所有的 (x,y) 做一个类似单调栈的东西(就是去除所有覆盖范围被其他 (x,y) 完全包含的点对),然后就可以转化成矩形加矩形求和。可以树状数组解决。

时间复杂度 O(nlog2n+qlogn)

414. CF961F k-substrings

发现往头尾各添加一个字符后,border 的长度至多增加 2

于是按串长从小往大推即可,哈希判一下当前的长度是否为 border。

posted @   zltzlt  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2023-07-07 20230707 讲题
点击右上角即可分享
微信分享提示