【洛谷P1939】 矩阵加速模板】的更多相关文章

题意简述 \(a[1]=a[2]=a[3]=1\) \(a[x]=a[x−3]+a[x−1](x>3)\) 求a数列的第n项对1000000007取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix} 0&0&1\\1&0&0\\0&1&1\end{bmatrix}, G=\begin{bmatrix} 1\\1\\1\end{bmatrix}\] 则\[ \begin{bmatrix} a[n-3]\\a[n-2]\\a[n-1]…
矩阵快速幂模版 #include <iostream> #include <cstring> #include <cstdlib> #include <algorithm> #include <cstdio> #include <cmath> #define ll long long using namespace std; const int MOD = (int) 1e9+7; struct Matrix { static con…
[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数) 输入格式: 第一行为n,表示操作的个数.下面n行每行有两个整数opt和x,opt表示操作…
P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,n<=2*10^9: 直接套矩阵快…
https://www.luogu.org/problemnew/show/P1939 矩阵快速幂 斐波那契数列 首先看一下斐波那契数列的矩阵快速幂求法: 有一个矩阵1*2的矩阵|f[n-2],f[n-1]|,要使它乘一个2*2的矩阵,使得到的矩阵为|f[n-1],f[n]|,即|f[n-1],f[n-2]+f[n-1]| 则该矩阵为 0  1 1  1 第一行第一列:f[n-2]*0+f[n-1]*1=f[n-1] 第一行第二列:f[n-2]*1+f[n-1]*1=f[n] 同理,对于本题:…
题目大意:给你一个数列a,规定$a[1]=a[2]=a[3]=1$,$a[i]=a[i-1]+a[i-3](i>3)$求$a[n]\ mod\ 10^9+7$的值. 解题思路:这题看似是很简单的递推,但是$n\leq 2×10^9$,递推肯定是会超时的.故我们需要优化. 常见优化有矩阵加速,还有什么我并不知道了. 用矩阵可将此类题目时间复杂度从$O(n)$优化为$O(\log_2 n)$. 具体对于此类形如$f(n)=f(n-1)*p(1)+f(n-2)*p(2)+...+f(n-k)*p(k)…
题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正关系,跟 CDQ 分治套树状数组之类性质差不多吧(所以我也不知道为什么洛谷要把这个作为一个模板). 言归正传,先看一眼原来的式子: \[f[i]=\begin{cases}1\ (i=0)\\\sum_{j=1}^{i}f[i-j]g[j]\ \mathrm{otherwise}\end{cases}\] \…
传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里…
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1)   ] [a(n-1) ] =   [1 0 0] * [a(n-2)  ] [a(n-2) ]  [0 1 0] [a(n-3)   ] 然后就是利用矩阵快速幂去算中间那个矩阵的n次结果 #include <iostream> #include <cstdio> #include <cstring> usi…
题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 输入输出样例 输入样例#1: 3 6 8 10 输出样例#1: 4 9 19 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,…