題意 給出乙個序列ai,定義斐波那契數列,求sigma f(ai)
還有可能令一段ai加上乙個數字。
斐波那契數列可以有矩陣快速冪加速求出,複雜度logn,我們這裡定義mat為加速矩陣,那麼對一段求和便可以寫成sigma mati,對於一段區間加上乙個數字,實際上等同於給每乙個mat在乘上乙個矩陣。
實際上變成維護區間加和的題目,只不過每乙個節點儲存乙個矩陣。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#define up(i,a,b) for(int i=a;i#define dw(i,a,b) for(int i=a;i>b;i--)
#define upd(i,a,b) for(int i=a;i<=b;i++)
#define dwd(i,a,b) for(int i=a;i>=b;i--)
//#define local
typedef
long
long ll;
const
double esp =
1e-6
;const
double pi =
acos(-
1.0)
;const
int inf =
0x3f3f3f3f
;const
int inf =
1e9;
using
namespace std;
ll read()
while
(ch >=
'0'&& ch <=
'9')
return x * f;
}typedef pair<
int,
int> pir;
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lrt root<<1
#define rrt root<<1|1
const
int n =
1e5+10;
const
int mod =
1e9+7;
struct matrix
void
initfib()
void
one(
) matrix operator+(
const matrix &m)
const
matrix operator*(
const matrix &m)
const
matrix operator^(
const ll &k)
const
return res;
}}tree[n<<2]
,lazy[n<<2]
; matrix isone;
bool
same
(matrix a, matrix b)
void
pushup
(int root)
void
pushdown
(int root)
}void
build
(int l,
int r,
int root)
int mid =
(l + r)
>>1;
build
(lson)
;build
(rson)
;pushup
(root);}
void
update
(int l,
int r,
int root,
int lf,
int rt,matrix x)
pushdown
(root)
;int mid =
(l + r)
>>1;
if(lf <= mid)
update
(lson, lf, rt, x);if
(rt > mid)
update
(rson, lf, rt, x)
;pushup
(root);}
matrix querry
(int l,
int r,
int root,
int lf,
int rt)
pushdown
(root)
;int mid=
(l + r)
>>1;
matrix ans; ans.
init()
;if(lf <= mid)ans = ans +
querry
(lson, lf, rt);if
(rt > mid)ans = ans +
querry
(rson, lf, rt)
;return ans;
}int n, m;
ll a[n]
;int
main()
else
}return0;
}
7 18c 學習筆記
個站尚未通過備案,借csdn住幾天 1.include using namespace std void swap int a,int b 注意對int 的理解,先是int 指標型別,再是引用 錯誤 int a,int b 即使通過指標直接進行修改記憶體,也是臨時形參變數 這裡不是全域性變數的指標 ...
IOS開發之路 C 學習筆記7 18
上節回顧 while 迴圈和do.while 迴圈 的區別?while迴圈 是先判斷後執行,do.while 是先執行一次後判斷.且 do.while 至少迴圈一次.break的作用 跳出switch 語句,跳出與自己最近的一次迴圈 continue的作用 跳出本次迴圈,執行下次迴圈.常量區 不允許...
C語言每日一練7 18
a類 b類2.請編寫乙個程式,使用者輸入乙個十進位制數,將其轉換為二進位制並輸出。3.下列程式的執行結果為 include void func int x int main return 0 以下為答案 1.d 硬碟檔案系統除了fat還有ntfs u盤檔案系統 光碟檔案系統 2.include in...