【演算法競賽進階指南】HDOJ4699 Editor
阿新 • • 發佈:2018-12-06
進階指南中給了一個好玩的方法,對頂棧,與對頂堆有這異曲同工之妙,涉及左側棧的操作,都需要對儲存最大字首和的陣列進行維護
#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; }