先上一道例题:CF446C
维护区间求和 和区间对应位置加上对应的斐波那契数列。
这不是一个一次函数,也不是一个差分序列。所以我们线段树不能做区间加这一个操作。
考虑斐波那契数列的通项 $Fn=\frac{\sqrt{5}}{5}[(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n]$
发现这个东西是一个等比数列 我们可以利用线段树来维护等比数列 当然由于存在模数1e9+9
那么$\sqrt{5}$这个东西就好处理了。
简述一下二次剩余:存在一个式子$x^2\equiv n(mod p)$ 给出n和p 求出一个x满足这个等式 则我们称n为模p的二次剩余。
若不存在这样的x则称n是模p的非二次剩余。同时我们称x为二次同余方程的解。
对于一个n如果我们要求$\sqrt{n}mod p$的值 那么么我们按n是否是模p的二次剩余如果是的话就会满足$x^2\equiv n(mod p)\to \sqrt{n} mod p$
那么我们就可以用x代替$\sqrt{n}$即只需要求出该二次同余方程的解即可。
综上对于上述题目 我们找到关于5的二次同余方程的解再除以一波逆元可以发现变成了两个等比数列。
我们直接线段树维护等比数列即可。关于区间加我们等比数列求和更新该区间的值。
考虑下放标记其实我们找到对应的区间加上左端点的等比数列的比该pushdown的时候把右边区间加上左边区间的贡献即可。
```
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include