IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Daimayuan Online Judge 出栈序列判断 -> 正文阅读

[数据结构与算法]Daimayuan Online Judge 出栈序列判断

代码源每日一题

现在有一个栈,有nn个元素,分别为1,2,…,n1,2,…,n。我们可以通过push和pop操作,将这nn个元素依次放入栈中,然后从栈中弹出,依次把栈里面的元素写下来得到的序列就是出栈序列。

比如n=3n=3,如果执行push 1, push 2, pop, push 3, pop, pop,那么我们pop操作得到的元素依次是2,3,12,3,1。也就是出栈序列就是2,3,12,3,1。

现在给定一个合法的出栈序列,请输出一个合法的由push和pop操作构成的出栈序列。这里要求push操作一定是按1,2,…,n1,2,…,n的顺序。

输入格式

第一行一个整数nn,接下来一行nn个整数,表示出栈序列。

输出格式

输出2n2n行,每行一个push xpop的操作,可以发现一个出现序列对应的操作序列是唯一的。

样例输入1

3
2 3 1

样例输出1

push 1
push 2
pop
push 3
pop
pop

样例输入2

5
1 3 5 4 2

样例输出2

push 1
pop
push 2
push 3
pop
push 4
push 5
pop
pop
pop

数据规模

对于100%100%的数据,保证1≤n≤1000001≤n≤100000,出栈序列一定是个合法的出栈序列。

中文

思路:这个题是模拟栈的进栈与出栈,可以通过观察样例的大小的变化发现:前一个数小于当前数,那么它就一定是进栈,因为题目要求是从1到n按顺序插入的,而小的数先弹出就说明大的数还没有进。然后是前一个数大于当前数,那么当前数就一定是出栈的,因为之前插入过了,但是这里需要注意弹出栈也是有顺序的,你不能先弹出1,在弹出2,所以弹出的数一定是当前最大的,也就相当于栈顶。数据范围问题:是1e5,最后输出的东西的个数会是2e5,这里用cout即使是取消缓存仍然会非常慢,所以用printf。(我就是在这里被卡了)

完整代码:

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;
//#define int long long
#define fir first
#define sec second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)x.size()
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define repd(i, l, r) for (int i = l; i >= r; --i)
#define pb push_back


const int N=1e5+10;
int a[N];
stack<int>sta;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    scanf("%d",&n);
    int k=1;
    sta.push(0);
    int x;
    rep(i,1,n)
    {
        scanf("%d",&x);
        while(x!=sta.top())
        {
            sta.push(k++);
            printf("push %d\n",sta.top());
        }
        printf("pop\n");
        sta.pop();
    }
    return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:03:13  更:2022-03-13 22:05:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:29:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码