AcWing 128 編輯器(對頂棧)
阿新 • • 發佈:2020-07-16
解題思路
對頂棧的模板題。L和R的操作可以由對頂棧來實現,至於查詢操作用一個字首和陣列和一個存最大值的陣列來存就行了。
程式碼
const int maxn = 1e6+10; stack<int> skl, skr; int pre[maxn], f[maxn] = {-114514}, k; int main() { int q; scanf("%d",&q); while(q--) { char ch[2]; int num; scanf("%s",ch); if (ch[0]=='I') { scanf("%d",&num); ++k; pre[k] = pre[k-1]+num; f[k] = max(f[k-1],pre[k]); skl.push(num); } else if (ch[0]=='D') { if (!skl.empty()) { --k; skl.pop(); } } else if (ch[0]=='L') { if (!skl.empty()) { --k; skr.push(skl.top()); skl.pop(); } } else if (ch[0]=='R') { if (!skr.empty()) { ++k; pre[k] = pre[k-1]+skr.top(); f[k] = max(f[k-1],pre[k]); skl.push(skr.top()); skr.pop(); } } else if (ch[0]=='Q') { scanf("%d",&num); printf("%d\n",f[num]); } } return 0; }