Problem Statement
Solution
简洁解释一下题意,相信很多人都是卡在了题意理解上- 我们要求:
- 题目所给 [ l , r ] [l,r] [l,r]区间
- 的任意一个子区间
- 中的数组成的集合
- 的子集合中元素的和
- 作为下标的斐波那契数
- 的平方和
- 之和
- 所给 f f f含义是
- f ( f( f(集合 ) ) )=所有子集的数字和作为下标的斐波那契数的平方和
- 我们一层一层来做
Subtask 1:
区间的数字和作为下标的斐波那契数
- 复习: f i b o n a c c i fibonacci fibonacci矩阵
- 区间的数字和作为下标的斐波那契数
T = ∣ 1 1 1 0 ∣ \qquad\qquad\qquad\quad T=\begin{vmatrix}1&1\\1&0\end{vmatrix} T=∣∣∣∣1110∣∣∣∣
∴ f i b a + b = T a + b = T a ∗ T b = f i b a ∗ f i b b \therefore fib_{a+b}=T^{a+b}=T^a*T^b=fib_a*fib_b ∴fiba+b=Ta+b=Ta∗Tb=fiba∗fibb
Subtask 2:
区间的数字和作为下标的斐波那契数的平方
- 这是一个常见套路,当然你也可以直接算,但也可以改一改矩阵
f i 2 = ( f i − 1 + f i − 2 ) 2 = f i − 1 2 + 2 f i − 1 f i − 2 + f i − 2 2 f_i^2=(f_{i-1}+f_{i-2})^2=f_{i-1}^2+2f_{i-1}f_{i-2}+f_{i-2}^2 fi2=(fi−1+fi−2)2=fi−12+2fi−1fi−2+fi−22
头尾两项好维护,关键是中间的二倍积
2 f i f i − 1 = 2 ( f i − 1 + f i − 2 ) f i − 1 = 2