problem
给一个长度为n的序列。
支持两个操作
1.给区间[L,R]第i项加上斐波那契数列的第i项。
2.查询区间[L,R]的异或和。
$n,m<3e5$
solution
这一题其实要考虑Fibonacci数列的两个性质:
(i) $\sum_{i=1}^{n} fib(i)=fib(n+2)−1$
(ii)令$Si=S{i−1}+S_{i−2}$,
其中$S_1=a,S_2=b$
那么$S_i=bFib(i−1)+aFib(i−2)$
还有一个推导式$\sum_{i=1}^{n} S(i)=S(n+2)−S_2$
那么就很好做了, 在线段树中, 我们要只要记数列的前两项就可以方便的对数列进行求和。
然后用一个标记永久化的线段树做一下就可以了。
1 |
|