QOJ970 Best Subsequence

题意简述

给定序列 a1n,有 q 次询问,每次给定 l,r,k,你需要在 lr 中找到一个长度为 k 的子序列 b1k,求 kmaxi=1(bi+bimodk+1) 的最小值。

题目解析

考虑二分答案 m,将序列中 m2 的位置看做 1>m2 的看成 0.

容易发现在选择的子序列中,不会存在两个相邻的位置使得它们都是 0.

回到原数组,每个 1 位置肯定都可以选,而对于每对相邻的 1,设它们的位置分别为 i,j,有两种可能:

  • 若存在 k[i+1,j1] 使得 max(ai+ak,aj+ak)m,则可以选 i,k,j
  • 否则只能选 i,j(由于 ai,ajm2,有 ai+ajm)。

x=max(ai,aj),y=j1mink=i+1ak,可以注意到这对 1 中间的 0 可以选当且仅当 m[x+y,2y).

此处上界为 2y 是因为 x<yx+ym. 实际上 m=2y 的时候这对 (i,j) 就已经不存在了,因为 y 对应的位置的值会变成 1.

考虑每个 1 与符合条件的 0 才会造成贡献。

对于 1 的部分,可以

posted @   心灵震荡  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示