【算法竞赛进阶指南】HDOJ4699 Editor

进阶指南中给了一个好玩的方法,对顶栈,与对顶堆有这异曲同工之妙,涉及左侧栈的操作,都需要对保存最大前缀和的数组进行维护

#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
stack<int>a,b;
long long sum[1000005];

int main(){
    int n;
    cin>>n;
    while(n--){
        char c;
        cin>>c;
        int x;
        if(c=='I'){
            cin>>x;
            a.push(x);
            sum[a.size()]=sum[a.size()-1]+x;
        }
        if(c=='Q'){
            cin>>x;
            long long maxans=-0x3f3f3f;
            for(int i=1;i<=x;i++) maxans=max(sum[i],maxans);
            cout<<maxans<<"\n";
        }
        if(c=='D'){
            a.pop();
        }
        if(c=='L'){
            x=a.top();
            a.pop();
            b.push(x);
        }
        if(c=='R'){
            x=b.top();
            b.pop();
            a.push(x);
            sum[a.size()]=sum[a.size()-1]+x;
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/rign/p/10074836.html