Infinite Sequence (Easy Version)

思路#

题意

给定一个正整数 nn 和一个无限二进制序列 aa 的前 nn 项, 该序列定义如下:
对于 m>nm > n, am=a1a2am2a_m = a_1 \oplus a_2 \oplus \ldots \oplus a_{\lfloor \frac{m}{2}\rfloor}

tt 次询问 (t104)(t \leq 10^4) , 求 aia_i 值, 其中 1i10181 \leq i \leq 10^{18}
其中 ai{0,1}a_i \in \{0, 1\}

这不用找规律?
试图矩阵快速幂

{aiai1ai2, case i mod 2=0aiai1, otherwise

倘若维护

(aiai+12)

在更新 ai+12 需要其他信息, 因此不行

哎哎哎, 看了题解怎么是暴力优化
发现异或操作的性质是: 两个相同数异或可以无视

为了方便起见, 假设 n 是奇数(如果不是,递增 n 共单独处理边界情况)。首先预计算前 2n 项或等于 2n 的查询,直接返回预计算的值。对于 2m>n,观察以下关系:

a2m=a1a2am=a2m+1

定义 p=a1a2an,我们可以将异或和分解为:

a2m=a1a2am=a1a2an(an+1an+2)(an+3an+4)am

由于 n 是奇数,成对的 (an+1an+2), (an+3an+4), ,会相互抵消。这简化了公式为:

a2m=a2m+1={pcase m mod 2=1pamotherwise 

因此,我们可以通过递归地将 m 减半来计算 am,直到 m2n,并在每一步应用奇偶性规则。总体时间复杂度为:

O(log(m))

总结#

异或性质

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