128. 编辑器 - AcWing题库(对顶栈)--与对顶堆类似
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int sum[1000006]={0},f[1000006];
int main(){
stack<int>a,b;
memset(f,-0x3f,sizeof(f));
int Q;
cin>>Q;
while(Q--){
char c;
cin>>c;
if(c=='I'||c=='Q'){
int q;
cin>>q;
if(c=='I'){
a.push(q);
int k=a.size();
sum[a.size()]=sum[a.size()-1]+q;
f[a.size()]=max(f[a.size()-1],sum[a.size()]);
}
else {
cout<<f[q]<<"\n";
}
}
else {
if(c=='L'&&!a.empty()){
b.push(a.top());
a.pop();
}
else if(c=='R'&&!b.empty()){
a.push(b.top());
sum[a.size()]=sum[a.size()-1]+b.top();
f[a.size()]=max(f[a.size()-1],sum[a.size()]);
b.pop();
}
else if(c=='D'){
if(!a.empty()){
a.pop();
}
}
}
}
}
#include<iostream>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<vector>
using namespace std;
vector<int>ans;
stack<int>q;
int t=1;
int n,cnt;
void dfs(int x){
if(x==n+1){
if(++cnt>20){
exit(0);
}
for(auto it:ans){
cout<<it;
}
stack<int>a;
while(!q.empty()){
cout<<q.top();
a.push(q.top());
q.pop();
}
while(!a.empty()){
q.push(a.top());
a.pop();
}
cout<<endl;
return;
}
if(!q.empty()){
ans.push_back(q.top());
q.pop();
dfs(x);
q.push(ans.back());
ans.pop_back();
}
q.push(x);
dfs(x+1);
q.pop();
}
int main(){
cin>>n;
dfs(1);
}