2021日常训练1-C(栈的简单操作)

现在有n个数字依次进入一个栈,每个数字a进入栈的时候,如果栈顶元素小于a,则会将栈顶元素弹出,新的栈顶元素如果仍然小于a,则会将新的栈顶元素继续弹出,直到栈顶元素大于等于a为止,a才会加入栈。问n个数字依次进入后,最后栈里的数字依次是?

Input
输入第一行一个整数n(n<=100000),表示有n个数字依次进入栈。 接下来n行,每行一个整数,表示第i个数字。
Output
若干行,表示最后栈中的数字。
Sample Input
5
5
3
2
4
1
Sample Output
5
4
1

思路:可以直接用vector来模拟题目中所要求行为。(如下所示)也可以直接用stack,但最后打印输出需要另一个stack(如题解所示)。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn=100050;
int a[maxn];
stack<int> s;
vector<int> v;

int main()
{
    
    
    int n,x;
    scanf("%d",&n);
    while(n--)
    {
    
    
        scanf("%d",&x);
        if(v.empty() || v.back()>=x) v.push_back(x);
        else
        {
    
    
            while(v.back()<x && !v.empty()) v.pop_back();
            v.push_back(x);
        }
    }
    int l=v.size();
    for(int i=0;i<l;i++) printf("%d\n",v[i]);
    return 0;
}



猜你喜欢

转载自blog.csdn.net/weixin_45754016/article/details/114278570