题解 P10045【[CCPC 2023 北京市赛] 线段树】

Link

题意

给你一个长为 n 的序列 a,保证 ai 是奇数。有两种操作共 q 次:

  1. 给定 l,r,xi[l,r],aiai+x,保证 x 是偶数;
  2. 给定 l,r,求 i=lrai,对 220 取模。

数据范围: n,q2×105,时限 4s。

思路

题外话:在 qoj vp 的时候没给时限,卡了好久常数才敢交。vp 完后几天在模拟赛上遇见相似套路直接秒了。

因为保证了 ai 时刻为奇数,所以不妨设 ai=2bi+1

所求即为 i=lr(2bi+1),而答案对 220 取模,所以展开后不取 1 的项数最多为 19

那么我们建立线段树,对于一个区间 [l,r],我们维护 fi 表示 S,|S|=ijSbj,显然只有 f019 可能有值。合并暴力即可。

考虑修改,考虑 S,|S|=ijS(bj+x),枚举选 b 的子集 TT(rl+1|T||S||T|)x|S||T|jTbj,即 fi=j=0ifjxij(rl+1jij),可以依此更新。

t=20,则时间复杂度 O(nt2logn)

看起来很大,但其实合并和更新时带了 1/2 的常数,再加个标记永久化,用 unsigned 代替取模,实际只用了 2.5s。

posted @   ffffyc  阅读(87)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示