字符串
本文字符串下标从 1 开始,无歧义时默认 n 为当前所述字符串长度。
联合省选 2025 总结
联合省选 2025 总结
比赛情况
D1T1
思考 [1,1.5]h 无果,遂放弃。没有想到关键结论:最大化中位数必不劣。高估题目难度。
D1T2
约 1h 解决暴力,2h 左右疯狂卡常 + 乱搞,试图冲过 8e4,比较成功。约 88pts,但是用时过长。
D1T3
过难。
D2T1
思考约 1h,暴力写 + 调约 2h,写线段树 + 调约 1.5h。没调出来,与暴力同分。非常失败,原因是胡思乱想时间过长,写暴力能力(准确度)有待提升。
D2T2
暴力都难写。
D2T3
没时间看。
比赛经验较缺乏,习惯于长时间思考。应快速验证做法并在想清楚后实施,避免浪费时间。
将来计划
- 复习已学算法和数据结构,巩固基础;
- 练习 ARC 和 CF Div 1,2,练习观察性质和题目转化能力;
- 学习省选算法,练习相应例题。
学长建议
练习进程
未命名
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
技巧
调换枚举顺序
Example 1 求
ans=l=1∑nr=l∑nl≤i≤rminai
求 max 类似。直接统计十分困难,考虑枚举 i,求符合条件的区间数量。
ans=i=1∑nl=1∑ir=i∑n[ai=l≤j≤rminaj]=i=1∑nl=1∑ir=i∑n[∀l≤j≤r,ai≥aj]
先假设 ai 互不相同,那么设 prei 为最大的 j 满足 j<i∧aj<ai,nxti 为最小的 j 满足 j>i∧aj<ai,那么 l,r 必须满足 prei<l∧r<nxti。
不难发现,符合条件的 [l,r] 数量即为 (i−prei)(nxti−i)。故
ans=i=1∑n(i−prei)(nxti−i)
pre,nxt 可用单调栈求,基本操作。
当 ai 中有相同元素时可能会算重或算漏,不妨钦定当且仅当 i 为 [l,r] 内第一个最小值时合法,那么需要稍微修改 prei 的定义,为最大的 j 满足 j<i∧aj≤ai,即 i 之前不能有相等的最小值。
Example 2 求
ans=l=1∑nr=l∑nf(l,r)
其中 f(l,r) 表示 S(l,r)={ai∣i∈[l,r]} 中的连续段个数。(Src:AT_abc390_f [ABC390F] Double Sum 3。)
注意到每个连续段必有结尾(或者开头,也是等价的),故使 [l,r] 内每个 ax 均代表一个连续段,其中 x 满足 x 最小且 ax∈S(l,r)∧ax+1∈/S(l,r)。
枚举 x,求有多少个区间 [l,r] 满足 S(l,r) 中有 ax 代表的连续段。同样定义 prei 为最大的 j 使得 j<i∧(aj=ai∨aj=ai+1),nxti 为最小的 j 使得 j>i∧aj=ai+1,答案与上一题形式相同。
Conclusion 本质是将枚举复杂度大的对象换成复杂度小的。比如区间有 O(n2) 个,而最小值只可能有 O(n) 个,显然枚举最小值更优。但同时也要考虑求合法对应对象的复杂度。最小值求合法区间数量均摊 O(1),可以接受。