題解 HDU Homework 倍增

2022-02-23 19:09:15 字數 1042 閱讀 2480

矩陣題一定要多多檢查一下是否行列反了...

一百個遞推項一定要存101個

說多了都是淚啊

一下午就做了這一道題因為實在是太菜了太久沒寫這種矩陣的題目...

設乙個行向量\(e\),和乙個增逛矩陣\(a\),他們咋定義的見我那篇講線性遞推部落格

現在我們再預處理\(st\)矩陣陣列,其中\(st_i=a^\)。

考慮這樣一種做法,我們考慮讓\(e\)總共有101個值,然後當第乙個值被增逛為\(f_\)時,暴力將\(e\)中的第\(101\)項修改。中間的轉移直接利用這個倍增陣列。中間的轉移由於是倍增,而且是行乘以乙個矩陣,這樣的話複雜度就是\(o(m^2)\)。考慮乙個詢問就要處理一次最終複雜度\(o(m^3\log n+qm^2\log n)\)

細節要處理一下

//@winlere

#include#include#include#include#includeusing namespace std; typedef long long ll;

inline int qr()

const int maxn=1e2+3;

const int mod=1e9+7;

int n,m,q,t;

const int m=101;

struct mat

inline int*operator (int x)

inline mat operator *(mat&f)

}st[31];

struct line

inline int&operator(int x)

inline line operator *(mat&f)

}e;int init[maxn];

pair,vector> q[maxn];

inline void pow(const int&num)

int main()

pow(n-cur);

printf("case %d: %d\n",++cnt,e[1]);

}return 0;

}

題解 海亮集訓 倍增 放積木

alice 有 n 塊積木,放置第 i 塊積木會佔據區間 li,ri alice 每次會騰出乙個區間放積木,她希望放的積木盡可能多,對每個詢問區間,你需 要回答 alice 最多可放置的積木數量。注意 積木與積木的放置區間不可重疊,且任意選定的積木放置區間不能超出詢問區間。我們想整解 線段覆蓋,我們...

倍增的兩道應用題(題解報告)

題目鏈結 題意 題意不難看懂,就是要求兩點間道路中最大權值的最小值 思路 這道題有很多種解法,這裡講利用lca的解法 首先我們知道,解肯定是建立在最大生成樹上的 先用kruscal建最大生成樹 然後再在lca中維護乙個d u,v 表示從節點u走到節點v經過的道路的最小權重 然後就可以上 了 ac i...

貨車運輸題解 最小生成樹,倍增lca

解法 我們發現,構建乙個最大生成樹,就是最優的運輸方案,可以使用kruskal演算法,通過並查集實現最大生成樹的構建。對於q次詢問,每一次可以通過lca的方法在o logn 時間內找到答案,如果x,y不在乙個連通分量裡面,輸出 1,否則跑一遍x,y的lca即可。include h using nam...