1. 程式人生 > >【演算法競賽進階指南】HDOJ4699 Editor

【演算法競賽進階指南】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;
}