• L3-002 特殊堆栈 (双数组模拟栈)


    堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的中值。给定 N 个元素,如果 N 是偶数,则中值定义为第 (frac{N}2) 小元;若是奇数,则为第 (frac{N+1}2) 小元。

    输入格式:

    输入的第一行是正整数 N((≤10^5))。随后 N 行,每行给出一句指令,为以下 3 种之一:

    Push key
    Pop
    PeekMedian
    

    其中 key 是不超过 105 的正整数;Push 表示“入栈”;Pop 表示“出栈”;PeekMedian 表示“取中值”。

    输出格式:

    对每个 Push 操作,将 key 插入堆栈,无需输出;对每个 PopPeekMedian 操作,在一行中输出相应的返回值。若操作非法,则对应输出 Invalid

    输入样例:

    17
    Pop
    PeekMedian
    Push 3
    PeekMedian
    Push 2
    PeekMedian
    Push 1
    PeekMedian
    Pop
    Pop
    Push 5
    Push 4
    PeekMedian
    Pop
    Pop
    Pop
    Pop
    

    输出样例:

    Invalid
    Invalid
    3
    2
    2
    1
    2
    4
    4
    5
    3
    Invalid
    

    思路:使用lower_bound这个函数(使用方法:Here)

    // Murabito-B 21/04/23
    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    void solve() {
        int n, x;
        string s;
        cin >> n;
        vector<int> v, v1;
        while (n--) {
            cin >> s;
            if (s == "Push") {
                cin >> x;
                v1.push_back(x);
                auto it = lower_bound(v.begin(), v.end(), x);
                v.insert(it, x);
            } else if (s == "Pop") {
                if (v1.size() == 0) cout << "Invalid
    ";
                else {
                    auto it = lower_bound(v.begin(), v.end(), v1[v1.size() - 1]);
                    v.erase(it);
                    cout << v1[v1.size() - 1] << "
    ";
                    v1.pop_back();
                }
            } else {
                if (v1.size() == 0) cout << "Invalid
    ";
                else {
                    if (v.size() & 1) cout << v[v.size() / 2] << '
    ';
                    else
                        cout << v[v.size() / 2 - 1] << "
    ";
                }
            }
        }
    }
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        solve();
        return 0;
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    Java【第二篇】基本语法之--进制、运算符
    Java【第一篇】基本语法之--关键字、标识符、变量及分类、数据类型及转换
    安装运行zookeeper的坑
    部署java应用的几种方式
    解决sudo用户找不到环境变量的问题
    Python装饰器详解
    filebeat开启自带模块收集日志如何辨别日志来源等
    使用elasticsearch7.3版本在一台主机上部署多个实例组建集群
    redis 集群搭建
    Kibana多用户创建及角色权限控制
  • 原文地址:https://www.cnblogs.com/RioTian/p/13944252.html
Copyright © 2020-2023  润新知