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

输入格式:

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

  1. Push key
  2. Pop
  3. PeekMedian

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

输出格式:

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

输入样例:

  1. 17
  2. Pop
  3. PeekMedian
  4. Push 3
  5. PeekMedian
  6. Push 2
  7. PeekMedian
  8. Push 1
  9. PeekMedian
  10. Pop
  11. Pop
  12. Push 5
  13. Push 4
  14. PeekMedian
  15. Pop
  16. Pop
  17. Pop
  18. Pop

输出样例:

  1. Invalid
  2. Invalid
  3. 3
  4. 2
  5. 2
  6. 1
  7. 2
  8. 4
  9. 4
  10. 5
  11. 3
  12. Invalid

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

  1. // Murabito-B 21/04/23
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. using ll = long long;
  5. void solve() {
  6. int n, x;
  7. string s;
  8. cin >> n;
  9. vector<int> v, v1;
  10. while (n--) {
  11. cin >> s;
  12. if (s == "Push") {
  13. cin >> x;
  14. v1.push_back(x);
  15. auto it = lower_bound(v.begin(), v.end(), x);
  16. v.insert(it, x);
  17. } else if (s == "Pop") {
  18. if (v1.size() == 0) cout << "Invalid\n";
  19. else {
  20. auto it = lower_bound(v.begin(), v.end(), v1[v1.size() - 1]);
  21. v.erase(it);
  22. cout << v1[v1.size() - 1] << "\n";
  23. v1.pop_back();
  24. }
  25. } else {
  26. if (v1.size() == 0) cout << "Invalid\n";
  27. else {
  28. if (v.size() & 1) cout << v[v.size() / 2] << '\n';
  29. else
  30. cout << v[v.size() / 2 - 1] << "\n";
  31. }
  32. }
  33. }
  34. }
  35. int main() {
  36. ios_base::sync_with_stdio(false), cin.tie(0);
  37. solve();
  38. return 0;
  39. }

L3-002 特殊堆栈 (双数组模拟栈)的更多相关文章

  1. Java连载69-接受输入、用数组模拟栈

    一.编写一个酒店管理系统 1.直接上代码 package com.bjpowernode.java_learning; ​ public class D69_1_ { //编写一个程序模拟酒店的管理系 ...

  2. 数组模拟栈(C语言)

    用数组模拟栈的实现: #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct ...

  3. Java数组模拟栈

    一.概述 注意:模拟战还可以用链表 二.代码 public class ArrayStack { @Test public void test() { Stack s = new Stack(5); ...

  4. Hdu 3887树状数组+模拟栈

    题目链接 Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  5. JavaScript数组模拟栈和队列

    *栈和队列:js中没有真正的栈和队列的类型              一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭       FILO   何时使用:今后只要仅希望数组只能从一端进 ...

  6. LeetCode 155 - 最小栈 - [数组模拟栈]

    题目链接:https://leetcode-cn.com/problems/min-stack/description/ 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的 ...

  7. java、C语言实现数组模拟栈

    java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayS ...

  8. 数据结构(3):java使用数组模拟堆栈

    堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...

  9. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  10. poj 3415 Common Substrings(后缀数组+单调栈)

    http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Sub ...

随机推荐

  1. python01-基础概念与环境搭建

    学习目标 了解硬件 & 操作系统 & 软件(应用系统)之间的关系. 了解常见的操作系统都有哪些. 了解编译器和解释器的区别和作用. 了解编程语言进行分类 了解Python解释器的种类 ...

  2. 【GIT】学习day04 | 将本地代码推送到码云仓库中进行管理【外包杯】

    仓库代码页 将本能仓库和码云仓库进行关联 代码组成 git remote add origin 加上下面的地址 将本地仓库的代码推送到码云仓库上 git push -u origin master 之 ...

  3. 【uniapp】学习笔记day03 | 页面制作【外包杯】

    一.开发层级结构介绍 page.json 对uniapp进行全局配置,决定页面文件的路径.窗口样式.原生的导航栏.底部的原生tabbbar manifest.json 应用的配置文件,指定应用的名称. ...

  4. 洛谷4055 [JSOI2009]游戏(二分图博弈)

    例题:在N×M的迷宫中有一个棋子,小 AA 首先任意选择棋子放置的位置.然后,小 YY 和小 AA 轮流将棋子移动到相邻的格子里.游戏的规则规定,在一次游戏中,同一个格子不能进入两次,且不能将棋子移动 ...

  5. [ABC283Ex] Popcount Sum

    Problem Statement Find the sum of popcounts of all integers between $1$ and $N$, inclusive, such tha ...

  6. POJ1006、hdu1370

    思路:中国剩余定理.纯粹的用暴力求逆元. 1 #include<iostream> 2 #include<string.h> 3 #include<string> ...

  7. MySQL5.7允许远程root访问

    MySQL5.7允许远程root访问 登录你的服务器MySQL mysql -u root -p MySQLroot密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@' ...

  8. 【难受】SpirngCloud-Alibaba-nacos跨服务器访问接口的问题

    原想法:我首先准备了 一个网关 2个服务 分别将两个服务部署到不同的远程服务器当中 实现跨服务器访问接口 网关为本地调用--这里就不一一介绍了 问题 利用gateway做路由时出现服务不可用的情况,看 ...

  9. 【电影推荐系统】Spring Boot + Vue3 前后端分离项目

    目录 0 前言 1 项目前端介绍 1.1 项目启动和编译 1.1.1 项目启动 1.1.2 项目编译 1.2 前端技术栈 1.3 功能模块前端界面展示 1.3.1 基础功能模块 1.3.2 用户模块 ...

  10. Zabbix自带模板监控MySQL服务

    Zabbix的服务端与客户端的安装这里不再赘述了,前面也有相应的文章介绍过了,感兴趣的伙伴们可以看看历史文章就可以了,今天主要介绍下如何利用zabbix自带的模板来监控MySQL服务的一些状态,同时通 ...