首页 > Windows开发 > 详细

AcWing 128 编辑器(对顶栈)

时间:2020-07-16 23:18:39      阅读:49      评论:0      收藏:0      [点我收藏+]

题目链接

解题思路

??对顶栈的模板题。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;
}

AcWing 128 编辑器(对顶栈)

原文:https://www.cnblogs.com/shuitiangong/p/13325419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!