AcWing 128. 编辑器 模拟栈+对顶栈

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 128. 编辑器 模拟栈+对顶栈相关的知识,希望对你有一定的参考价值。

主要是记录一下对顶栈的思想:分成两部分,两部分会相互push和pop;

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define pb push_back
#define fi first
#define se second
#define mem(a,x) memset(a,x,sizeof(a));
#define db double 
#define fir(i,a,n) for(int i=a;i<=n;i++)
//======================
const int N=1e6+10;
stack<int>a,b;
int sum[N],f[N];//以i为结尾的最大前缀和 
int main()
{
	int t;cin>>t;
	f[0]=-0x3f3f3f3f;//必须初始化
	while(t--)
	{
		char ch;int x;
		cin>>ch;
		if(ch=='I')
		{
			cin>>x;
			a.push(x);
			sum[a.size()]=sum[a.size()-1]+a.top();//这里用个数表示第几个 参考 秦淮岸灯火阑珊  
			f[a.size()]=max(f[a.size()-1],sum[a.size()]);
		}
		else if(ch=='D')
		{
			if(a.size()) a.pop();
		}
		else if(ch=='L')
		{
			if(a.size())
			{
				b.push(a.top());a.pop();
			}		
		}
		else if(ch=='R')
		{
			if(b.size())
			{
				a.push(b.top());b.pop();
				sum[a.size()]=sum[a.size()-1]+a.top();
				f[a.size()]=max(f[a.size()-1],sum[a.size()]);
			}
		 } 
		 else
		 {
		 	cin>>x;
		 	cout<<f[x]<<endl;
		 }
	}
	return 0; 
}

以上是关于AcWing 128. 编辑器 模拟栈+对顶栈的主要内容,如果未能解决你的问题,请参考以下文章

对顶栈

HDU 4699 - Editor - [对顶栈]

HDU - 4699 对顶栈

HDOJ4699(对顶栈)

编辑器题目栈。对顶堆

20.6.7 周赛 设计浏览器历史记录 中等 5430(对顶栈)