Day13(20241112)
获得成就:在集训队员中登顶。
T1 线段树与区间加
感觉题解做法很牛,所以我来写一下我的 做法。
我们先考虑单独维护 数组。
如果先不考虑 pushdown
。发现我们对区间 进行加法操作,就是找到所有 且 的节点 增加 。发现这个限制太奇怪了,所以我们考虑对于所有 的节点 增加 。那么一个节点实际上的 就等于 。
那么对其求和就有 ,交换一下顺序就有 。发现这样 pushdown
只需要把那些要 pushdown
的节点的 变成 即可。
我们记 ,那么我们维护的操作有:
- 对于所有 的节点 加上 。
- 对于所有 且 的节点的 清空。
- 查询的
发现把所有的 看成二维平面上的点,那么要做的操作就是矩形加和矩形推平,考虑使用 KDT,时间复杂度为 。
现在再考虑吧 数组。
仍然沿用上面对于 的修改,那么对于一个区间,如果这个区间的实际区间和为 ,那么有 。
那么维护 就是要维护 。对于前者,每一次修改的贡献可以通过前缀和和差分实现;对于后者,只需要将 修改成 即可。时间复杂度仍然是 ,感觉跑起来还挺快的。
T2 字符串
考虑 意味着什么,发现在绝大多数情况下等价于 ,其中 表示 在后缀数组中的排名。
而 可以直接二维数点,使用树状数组可以做到 。
发现反例就是 但 的情况。考虑如何处理 。
直接使用优秀的拆分的 trick,先枚举 ,然后找到满足 的 连续段 ,那么如果有 ,那么这一段区间都是被额外统计的。而这样的连续段最多只有 段,仍然使用树状数组进行二维数点可以做到 ,常数较小可以通过。
发现这种结构其实就是 runs,所以我们对于每一个 runs,枚举最小循环节重复多少次,这样得到的连续段 只有 个,时间复杂度也就做到了 。
T3 格雷码
据说可以把这个题的大致做法。
发现格雷码的限制比较宽松,所以认为在 时,极差为 ; 时,极差为 。
你发现直接构造是不太可能的,所以考虑增量构造。发现 不太现实,所以考虑 。
在 中,我们对于后 位的构造还是依赖 的结果,想办法对于前两位来进行构造。
我们将 的序列拆成:,其中 是一段操作, 是单个操作, 记为 反转后的结果。
题解给出如下构造方式( 为奇数):
发现 中的数出现了 次, 出现了 次,但 没有出现, 和 出现了 次。由于极差取的是最小值,所以数字出现次数的集合是确定的,想办法找到一组满足条件的分割即可。
Day14(20241115)
你说得对,但是 225,220,220,220,220...
T1 Two permutations
感觉这道题就随机写一写就写出来了?
显然有 不会在计算 的集合中出现,所以显然有 ,我们大胆猜测满足这个条件就一定有解。我们让 连向 ,就会形成一棵树。
树的特殊情况是链,那么我们考虑 的情况。
通过暴搜发现只有四组解,他们本质上就是如下的结构:。
那么发现对于树上的每一条链,单独拉出来都是这个结构,那么我们按照从小到大加入每一个 ,根据 所在的位置以及当前深度的奇偶性来决定会插入到那一个位置:例如对于左侧,深度为奇数的点会插在最后面,深度为偶数的点会插在 的后面。发现可以使用链表维护,时间复杂度 。
T2 冲刺
这种题的受众到底都是谁
T3 串联
考虑使用合并果子点分治。我们就考虑经过分治中心的所有路径。我们看每一个点到分治中心的路径,我们关注他的路径上最小值 和权值和 。那么我们想要找到异侧的两个点 ,使得其满足 的最小的 。
考虑按照 从大到小枚举 ,找到所有 中 的最小的 ,可以直接使用数据结构维护。
时间复杂度 。
Day15(20241117)
今天集训队 rk1 和 rk15 分差 ,感觉自己错完了。
T1 药水
记
发现清空这个问题是不好处理的,所以我们尝试将问题倒序过来:
实时维护一个数 ,表示当前还需要多少药水。如果某一天 ,那么令 ,表示需要的药水数增加了 ;如果 ,那么令 ,表示有了 瓶药水。同时,每一次操作之后要保证 ,同时连续的 天中至少有一个 。
发现 之后前后的状态是相对无关的,我们只关注 从 开始,进行一定数量的操作之后,第一次到 这一段。假设长度为 的概率为 ,那么我们只关注 的情况,记 ,那么最终的答案就是 。
由于只找第一次 的时刻,所以可以认为是找第一次 的情况,那么就可以把二操作的取 去掉。
考虑如何刻画 和 的限制。发现在 的时候长得很像格路计数,所以尝试使用各路计数去考虑,那么每一次就是向右走 步,向上走 步。
我们可以在所有 处放上障碍,其中 ,我们就是要对于每一个障碍 ,统计它是第一次被遇到的概率 。
记 表示从 走到 的概率,记 ,那么 。
那么 ,发现这个转移时单向的,所以可以使用分治 NTT 来时限。那么现在的问题就是求出所有的 和 。
发现所有需要的 中 取遍了 ,但是 只有 ,, 这共计 个数。
同时由于 的项数也只有 项,所以可以通过分析 的某一项系数,发现可以从 连续的 项系数得到他的上一项或者下一项,同时我们也可以从 的连续 项得到 的某一项。那么所有我们需要的 都可以递推出来。
复杂度疑似是 ,但是我没写代码,我不知道。
T2 字符游戏
没搞懂,不会细节。
博弈论问题,所以我们考虑计算 SG 值。发现每一步只会有 中决策。
发现通过维护一些东西之后,是可以支持对一个字符串 地从前面或者后面插入一个字符, 地合并两个串。
所以直接套用点分树,可以做到 的复杂度。
T3 子集和
发现这个循环卷积无法加速,所以对于单次询问,我们仅能支持 ,那么发现 能够支持对于两个多项式查询某一个点的值,所以我们想办法把问题变成两个多项式的乘积。
首先将 的询问差分成 的。
考虑猫树,我们找到 的节点,那么我们应当在这个节点维护如下信息:对于所有 ,维护 ;对于每一个 ,维护 。那么从查询可以直接合并 和 处对应的信息。
那么考虑如何构造,我们只考虑左侧,右侧是对称的。对于 是可以从父亲处继承过来的,而 的部分,我们可以再用一次分治乘的方式 的求出所有的 ,然后做一遍前缀和即可。
时间复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现