The 2024 ICPC Asia EC Regionals Online Contest (II) - Problem H. Points Selection

注意到如果 query(a,b,c) 为真,那么 query(a,b,c) 一定为真。

从小到大枚举询问中 a 的值,按横坐标从小到大依次加入每个点,维护 fc 表示最小的 b 满足 query(a,b,c) 为真。

假设当前正在加入点 (x,y,w),有 f(c+w)modn=min(f(c+w)modn,max(fc,y))

观察状态转移方程可知,如果 yf(c+w)modn,那么就没有更新的必要。令 m=max(f0,f1,,fn1),那么如果 ym,则这个点是完全无用的,可以直接跳过。

由于数据随机,可以近似地认为加入 k 个点后,所有 2k 个子集和模 n 的结果在 [0,n) 等概率均匀分布。可以看作 2k 个小球随机放入 n 个洞之中,填满所有 n 个洞所需的期望球数是 O(nlogn),因此 k=O(logn) 时期望可以填满整个 f 数组。这说明,f 数组的最大值的期望值等于所有已经加入的点的纵坐标的第 O(logn) 小值,即 O(nlognk)

于是,加入的第 k 个点的纵坐标 y<m 的概率为 O(lognk),期望只需要更新 O(k=1nlognk)=O(log2n)f 数组。由于这个值并不大,每次暴力 O(n) 更新整个数组即可。有了 f 数组就可以很容易地求出最终的答案。

时间复杂度 O(nlog2n)

 

  

posted @   Claris  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2016-09-21 BZOJ1931 : [Shoi2007]Permutation 有序的计数
2016-09-21 BZOJ3654 : 图样图森破
点击右上角即可分享
微信分享提示