CF446C题解
看到序列操作,又是区间加,想到线段树。
但是维护斐波那契数列的和无法打标记,但发现对于一个区间,加上一个斐波那契数列后仍然满足递推公式 \(f_i=f_{i-2}+f_{i-1}\),只是递推起点 \(f_1,f_2\) 变了,这启发我们将这个数列里的数都和 \(f_1,f_2\) 取得联系,这样每次修改只用改 \(f_1\) 和 \(f_2\) 就能知道这一个区间的信息。
事实上,只是递推起点不同,递推公式与斐波那契数列相同的数列被称为广义斐波那契数列,记为 \(a_i\),它满足如下性质:
\(a_i=f_{i-2}a_1+f_{i-1}a_2\)。
那么一个数列的和可表示为:
\[s=\sum_{i=1}^{n}f_{i-2}a_1+f_{i-1}a_2
\]
又有斐波那契数列满足如下性质:
- \(f_{-1}=1\)
- \(\sum_{i=1}^{n}f_i=f_{n+2}-1\)
所以 \(s=f_na_1+(f_{n+1}-1)a_2\)
因此线段树上维护 \(f_1,f_2\) 的变化标记就能更新区间和。
浙公网安备 33010602011771号