QOJ970 Best Subsequence
题意简述
给定序列 a1⋯n,有 q 次询问,每次给定 l,r,k,你需要在 l∼r 中找到一个长度为 k 的子序列 b1⋯k,求 kmaxi=1(bi+bimodk+1) 的最小值。
题目解析
考虑二分答案 m,将序列中 ≤m2 的位置看做 1,>m2 的看成 0.
容易发现在选择的子序列中,不会存在两个相邻的位置使得它们都是 0.
回到原数组,每个 1 位置肯定都可以选,而对于每对相邻的 1,设它们的位置分别为 i,j,有两种可能:
- 若存在 k∈[i+1,j−1] 使得 max(ai+ak,aj+ak)≤m,则可以选 i,k,j;
- 否则只能选 i,j(由于 ai,aj≤m2,有 ai+aj≤m)。
设 x=max(ai,aj),y=j−1mink=i+1ak,可以注意到这对 1 中间的 0 可以选当且仅当 m∈[x+y,2y).
此处上界为 2y 是因为 x<y 且 x+y≤m. 实际上 m=2y 的时候这对 (i,j) 就已经不存在了,因为 y 对应的位置的值会变成 1.
考虑每个 1 与符合条件的 0 才会造成贡献。
对于 1 的部分,可以
望穿寂夜晨曦至,雄鹰展翅图九天。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】