樹狀陣列筆記 矩陣快速冪筆記

2021-09-25 12:14:13 字數 945 閱讀 9634

樹狀陣列先認識乙個很有意思的操作,x & (- x)其實是,x & (~x | 1)如果x為偶數,就取最後的零的個數的2次冪,如果x為奇數,取1

先畫個圖

此圖從轉

由此可見,我們用樹狀陣列可以表示任何乙個區間的和

我們在這邊主講用樹狀陣列求逆序對,首先先用到離散化,不然很麻煩,把大小全部轉為序號

每次輸入乙個數,只要沒超過n,就一直加上x & (-x)讓c[x] ++表示只要在x之上的都比它大

然後檢驗,向下,找到之前比它小的,然後加上1表示自己,然後用i去減(除了比它小的就只有比它大的了)

然後是矩陣快速冪

首先我們認識到乙個操作,c[i][j] = a[i][k] * a[k][j](k = 1;k <= n;k ++)

這是簡單的矩陣乘法,難點在於構造矩陣,用快速冪可以加速矩陣,平時的快速冪只是乙個數,現在變成了乙個矩陣

就醬以斐波那契為例

見**

// luogu-judger-enable-o2

#include#include#includeusing namespace std;

const int mod = 1000000007;

struct matrix;

matrix operator*(const matrix &b) const

}base,ans;

void init()

void ksm(long long n)

return;

}int main()

init();

ksm(n - 2);

printf("%lld",ans.a[1][1] % mod);

return 0;

}

矩陣快速冪 學習筆記

首先,我們需要了解矩陣。矩陣說白了就是一堆數,排成長方形的形狀。然後就是矩陣的運算,加減都很簡單,這裡談一下乘法 所以矩陣相乘,一定是有其中乙個矩陣的行等於另乙個矩陣的列的。矩陣快速冪則和一般的快速冪的操作是一樣的,只是把乘法變成了矩陣乘而已,就像過載那樣。這裡還要說一下單位矩陣 對於n m n m...

矩陣快速冪 leetcode筆記

問題描述 爬樓梯需要n階可爬到樓頂,每次只能爬1或2階,問共有多少種爬法。動態規劃 由於每次只能爬1或2階,故階數為n的總方案數為最後一步爬1階 即階數為n 1階的總方案數 加上最後一步爬2階 即階數為n 2階的總方案數 可得,狀態轉移方程 f n f n 1 f n 2 斐波那契數列 邊界條件 f...

矩陣快速冪學習筆記

其實會用快速冪已經有好長一陣子了,但是一直沒有寫一篇入門快速冪的筆記。據說,在遞推式優化上具有神奇的效果 效率很高 兩矩陣相乘,樸素演算法的複雜度是o n 3 如果求一次矩陣的m次冪,按樸素的寫法就是o n 3 m 既然是求冪,不免想到快速冪取模的演算法,這裡有快速冪取模的介紹,a b m 的複雜度...