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\) 的变化标记就能更新区间和。

posted on 2022-11-07 12:05  cool_tyl  阅读(14)  评论(0)    收藏  举报