Link
题意
给你一个长为 n 的序列 a,保证 ai 是奇数。有两种操作共 q 次:
- 给定 l,r,x,∀i∈[l,r],ai←ai+x,保证 x 是偶数;
- 给定 l,r,求 ∏ri=lai,对 220 取模。
数据范围: n,q≤2×105,时限 4s。
思路
题外话:在 qoj vp 的时候没给时限,卡了好久常数才敢交。vp 完后几天在模拟赛上遇见相似套路直接秒了。
因为保证了 ai 时刻为奇数,所以不妨设 ai=2bi+1。
所求即为 r∏i=l(2bi+1),而答案对 220 取模,所以展开后不取 1 的项数最多为 19。
那么我们建立线段树,对于一个区间 [l,r],我们维护 fi 表示 ∑S,|S|=i∏j∈Sbj,显然只有 f0∼19 可能有值。合并暴力即可。
考虑修改,考虑 ∑S,|S|=i∏j∈S(bj+x),枚举选 b 的子集 T,∑T(r−l+1−|T||S|−|T|)x|S|−|T|∏j∈Tbj,即 f′i=i∑j=0fjxi−j(r−l+1−ji−j),可以依此更新。
令 t=20,则时间复杂度 O(nt2logn)。
看起来很大,但其实合并和更新时带了 1/2 的常数,再加个标记永久化,用 unsigned
代替取模,实际只用了 2.5s。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)