T1:
给定两个数组 ,要求将 重排,使得 的位置个数最多,在此基础上最大化 的字典序。
。
最多的位置个数是容易求的,排个序即可。
如何最大化字典序?依次枚举 ,然后从大到小枚举 看看 是否可以让后面依然保持大于位置足够。
把 和 两类分类,因为这会影响后面需要多少个大于位置。
明显的结论:一定是 的前 小匹配。
进而,我们发现当 ,只会影响 一个位置的对应方式。。
T2:
给定平面上 个点。求点的排列,使得前 个点与原点的外包矩形周长 的增加量最小。。
断言:每次一定选使得增加量最小的哪个点。
证明:设这个点是 ,如果选了点 替代 ,不如把 放在 的前面,这样 及后面的点造成的增加量必然不增。
然后如何实现找增加量最小的点?维护三个优先队列,保存 "当前矩形上/右/右上方" 的点。取出一个点之后打标记,以后不要在其他队列里取出来。
T3:
个数 任意分组,要求每一组极差的和 ,求方案数。。
显然要排序,然后对于 有:单独开一组或者接在某组后面。
再细分,单独开一组立刻结束/单独开一组不结束/接在某组后面结束/接在某组后面不结束。
问题在于如果接在某组后面,每一组的结尾元素是不一定的,怎么找?
我们这么做:在加入 之后,剩下所有还没结束的组,贡献都增加 。这相当于对贡献做了一个差分,然后一直做前缀和直到结束,刚好就是一组的贡献。
表示考虑前 个,有 个还没结束的组,当前总和是 的方案数。
T4:
有 个三元组,每个数的值域为 。要求改最少的数,使每个三元组的总和递减。。
初始想法: 表示前 个三元组,第 个总和为 的方案数。。其中 表示 初始的和, 表示改成 至少需要动几个数。
可以 计算,这个复杂度是 的。
进阶想法:记录 为 的后缀 ,可以优化到 。
满分想法:我们直接在枚举 的过程中维护 的变化。用一个 map 维护 的差分,即 。再用一个变量维护 。 每次变动只有常数个位置变化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!