题目:
输入n,代表将会把1~n 随意的压入栈中,add代表入栈一个数,remove代表出栈一个数,严格按照1,2,3,4。。。。的顺序出栈。如果不能按顺序则需要一次排序,问需要排序多少次?
思路: 当我们经过一次排序后,其实后面的数都为有序的,并不影响后面的。也就是说后面是否需要排序不受已经排序过的数影响。
要点: 每次排序后直接清空栈
1.判断是否栈空,若为空代表:在已将排好序的基础上出栈——直接下一次输入
2. 若不空,且栈顶等于当前需要的出栈的数,则直接下一次输入
3. 若不空,且栈顶不等于当前需要的出栈的数,说明需要排序,并清栈
Input:
7
add 3
add 2
add 1
remove
add 4
remove
remove
remove
add 6
add 7
add 5
remove
remove
remove
Output:
2
#include <bits/stdc++.h>
using namespace std;
char s[10];
int main()
{
stack<int>st;
int T,ans = 0, now = 0;
scanf("%d",&T);
T<<= 1;
while(T--)
{
int n;
scanf("%s",&s);
if(s[0] == 'a')
{
scanf("%d",&n);
st.push(n);
}
else
{
now++;
if(!st.empty())
{
if(st.top() == now)
{
st.pop();
}
else
{
ans++;
while(!st.empty()) st.pop();
}
}
}
}
printf("%d\n",ans);
return 0;
}