我會按照我覺得的難度由簡單到困難排序。
我們可以將連續的
於是最後可以
要如何加入字元才能使最終結果最大呢?有一個想法是把
費氏數列
於是可以矩陣快速冪求出
有一點要注意的是
時間複雜度為
看到這一題有修改又有區間查詢,就會很想用線段樹,那要如何設計線段樹的節點內容呢,我們可以用
最後總時間複雜度
如果沒有移動區間的操作,那用線段樹就可以了,那如果要移動區間呢?可以用一個叫做樹堆 (
可以知道,牌的順序其實不重要,我們只要知道每一種牌有幾張就好了,假設有
令
總時間複雜度為
這題有一個很陰險的地方就是模的是
現在先假設要求的是二維的,那距離有哪些表示法呢?有
我們要如何將
那三維的要如何轉換,可以用一個四維的
總時間複雜度
可以觀察到如果一個耐電值
於是我們可以二分搜答案,那有了給定的
總時間複雜度
最短距離
剩下的就是如何挑選
總時間複雜度
這題叫做磚牆改是因為是從
如果是單純的詢問、操作,那就用線段樹就可以了,每個節點可以設一個
node[lpos].mx = max (node[lpos].mx, node[pos].mn);
node[lpos].mx = min (node[lpos].mx, node[pos].mx);
node[rpos].mx = max (node[rpos].mx, node[pos].mn);
node[rpos].mx = min (node[rpos].mx, node[pos].mx);
node[lpos].mn = min (node[lpos].mn, node[pos].mx);
node[lpos].mn = max (node[lpos].mn, node[pos].mn);
node[rpos].mn = min (node[rpos].mn, node[pos].mx);
node[rpos].mn = max (node[rpos].mn, node[pos].mn);
node[pos].mx = max (node[lpos].mx, node[rpos].mx);
node[pos].mn = min (node[lpos].mn, node[rpos].mn);
那有了刪除操作要怎麼做呢?可以觀察到對區間
總時間複雜度
大家都好厲害