作者:德莉傻天下第一可爱
链接:https://blog.nowcoder.net/n/bd5694a397064c7fb6a7160f40d56171
来源:牛客网
0x11 栈
- 单调栈 栈的基本操作
class MinStack
{
public:
/** initialize your data structure here. */
int a[5050];
int mi[5050];
int tops;
MinStack()
{
tops=0;
}
void push(int x)
{
a[++tops]=x;
if(tops==1)
{
mi[tops]=x;
} else
{
mi[tops]=min(mi[tops-1],x);
}
}
void pop()
{
tops--;
}
int top()
{
return a[tops];
}
int getMin()
{
return mi[tops];
}
}
;
- 编辑器 对顶栈 栈的应用 f数组存最大sum
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5 ;
const double pi = acos(-1.0);
int n, m;
int A[maxn], Atop;
int B[maxn], Btop;
int sum[maxn], f[maxn];
signed main()
{
cin >> n;
string cmd;
f[0]=-0x3f3f3f3f;
while(n--)
{
cin >> cmd;
if(cmd[0] == 'I')
{
cin >> m;
A[++Atop] = m;
sum[Atop] = sum[Atop - 1] + A[Atop];
f[Atop] = max(sum[Atop], f[Atop - 1]);
} else if(cmd[0] == 'Q')
{
cin >> m;
cout << f[m] << endl;
} else if(cmd[0] == 'D')
{
if(Atop)
Atop--;
} else if(cmd[0] == 'R')
{
if(Btop == 0)
continue;
A[++Atop] = B[Btop--];
sum[Atop] = sum[Atop - 1] + A[Atop];
f[Atop] = max(f[Atop - 1], sum[Atop]);
} else if(cmd[0] == 'L')
{
if(Atop == 0)
continue;
B[++Btop] = A[Atop--];
}
}
return 0;
}
- 火车进出栈问题 当入栈 + 出栈火车