演算法競賽高階指南 0x11 棧 Editor

2021-10-19 02:46:26 字數 1087 閱讀 1998

通過觀察我們可以將這個序列通過2個棧和2個陣列來維護5種操作進而達到題解,為了方便,直接用陣列來模擬棧 stkl[n](游標左邊的棧), stkr[n](游標右邊的棧), tl(左棧指標), tr(右棧指標);

s[n](字首和陣列), f[n](最大字首和);

對於第乙個操作,在游標處插入x,就是給stkl 的棧頂插入乙個x, 字首和陣列更新,最大字首和就是新的字首和 和 上乙個字首和取最大

將游標前面的第乙個元素刪除,就是將stkl的棧頂元素刪除

將游標向左移動,跳過乙個元素,就是將stkr插入stkl的棧頂元素,然後stkl的棧頂元素刪除,向右移動也是同理

查詢直接返回f[x]: 表示的就是字首和中的最大值

#include

using

namespace std;

const

int n =

1e6+10;

int stkl[n]

, stkr[n]

, tl, tr;

int s[n]

, f[n]

;void

push_left

(int x)

intmain()

else

if(op[0]

=='d')}

else

if(op[0]

=='l')}

else

if(op[0]

=='r')}

else

}return0;

}

演算法競賽高階指南 0x11 (棧)火車進棧

兩個操作圖中1操作是火車進棧,2是火車出棧,因為要按照字典序輸出,應該先執行操作2,執行操作1來保證字典序正確 直接用dfs來暴力模擬過程,即可輸出答案 include using namespace std int n,cnt 20 vector int state1 stack int stat...

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

《演算法競賽高階指南》0x32約數

求解 1,n 之間的最大的反素數,有性質 這個反素數是質因數個數最多的數中最小的乙個。證明 假設有乙個數質因數個數比它多,如果在他前面,不滿足反素數的定義,如果在他後面,一定可以找到第乙個質因數比它大的數,這個數作為結果更好,反證可知,這個數質因數一定是最多的 反證 假設有質因數與他的個數一樣但是比...