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 插入堆栈,无需输出;对每个 Pop 或 PeekMedian 操作,在一行中输出相应的返回值。若操作非法,则对应输出 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\n";
else {
auto it = lower_bound(v.begin(), v.end(), v1[v1.size() - 1]);
v.erase(it);
cout << v1[v1.size() - 1] << "\n";
v1.pop_back();
}
} else {
if (v1.size() == 0) cout << "Invalid\n";
else {
if (v.size() & 1) cout << v[v.size() / 2] << '\n';
else
cout << v[v.size() / 2 - 1] << "\n";
}
}
}
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
solve();
return 0;
}
L3-002 特殊堆栈 (双数组模拟栈)的更多相关文章
- Java连载69-接受输入、用数组模拟栈
一.编写一个酒店管理系统 1.直接上代码 package com.bjpowernode.java_learning; public class D69_1_ { //编写一个程序模拟酒店的管理系 ...
- 数组模拟栈(C语言)
用数组模拟栈的实现: #include <stdio.h> #include <stdlib.h> #define STACK_SIZE 100 typedef struct ...
- Java数组模拟栈
一.概述 注意:模拟战还可以用链表 二.代码 public class ArrayStack { @Test public void test() { Stack s = new Stack(5); ...
- Hdu 3887树状数组+模拟栈
题目链接 Counting Offspring Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- JavaScript数组模拟栈和队列
*栈和队列:js中没有真正的栈和队列的类型 一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭 FILO 何时使用:今后只要仅希望数组只能从一端进 ...
- LeetCode 155 - 最小栈 - [数组模拟栈]
题目链接:https://leetcode-cn.com/problems/min-stack/description/ 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的 ...
- java、C语言实现数组模拟栈
java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayS ...
- 数据结构(3):java使用数组模拟堆栈
堆栈原理: 数组模拟堆栈: //数组模拟栈 class ArrayStack{ //栈顶 private int top = -1; private int maxSize; private int[ ...
- ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)
本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...
- poj 3415 Common Substrings(后缀数组+单调栈)
http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K Total Sub ...
随机推荐
- Android学习day02【页面布局的练习】
在网上找了一些图片,只用最简单的颜色进行区分,目的是熟悉线性布局和相对布局 下面是我找到的简单的Android页面,你也可以尝试以下' 下面是我的实现代码 第一个
- 洛谷P2579 [ZJOI2005]沼泽鳄鱼(矩阵快速幂,周期)
例题:现在豆豆已经选好了两座石墩Start和End,他想从Start出发,经过K个单位时间后恰好站在石墩End上.假设石墩可以重复经过(包括Start和End),他想请你帮忙算算,这样的路线共有多少种 ...
- 又有新框架上线了,测试、AI 通通有「GitHub 热点速览」
本周热点之一可能就是 Apple 刚开源便获得 8k+ star 的机器学习框架 mlx,顺带官方开源的 mlx-example(示例仓)也在热门榜上有一席之位,据说它已经跑通了大模型 Llama 7 ...
- 3D组合地图在数据可视化大屏中的应用
前言 当下数据可视化大屏展示的花样层出不穷,可视化大屏的C位越来越卷,地图的样式已经不再止步于普通的平面地图,在虚拟环境中探索和交互,今天我们要介绍的这一款3D组合地图可以将复杂的数据以直观的方式呈现 ...
- java断言机制(assert)
java断言机制(assert) 概述 断言使用的时候不是很多,测试时会使用,springboot中也有使用,总的来说断言还是要慎重. 在Java中,同样也有assert关键字,表示断言 在Java中 ...
- 怎样在Facebook上开发客户
尽管Facebook的主打社交和娱乐,但它仍是一个有助于开发外贸客户的重要平台.通过利用Facebook的广告.社群.内容分享和直接沟通等功能,您可以扩大您的业务网络,找到更多的外贸客户,并促成国际贸 ...
- 【玩转腾讯混元大模型】怎么说?我用混元AI大模型开发了个IDEA插件
前言 halo 我是杨不易呀,在混元大模型内测阶段就已经体验了一番当时打开页面的时候灵感模块让我大吃一惊这么多角色模型真的太屌了,随后我立马进行了代码处理水平和上下文的效果结果一般般但是到如今混元大模 ...
- P5137 题解
前言 首先感谢所有帮助我卡常的大佬们. 题意 求 \((\sum_{i = 0}^{n} a^i b^{n - i})\mod p\) 的值(\(n \leq 10^{18}\),\(p\) 不一定为 ...
- 如何保证XML正确性
如何保证XML正确性 XML是个盒子,什么都能装,但是装进去的东西正确与否恐怕无法得知.往往我们都人工审核.双人复核保证,但是次数多了难免会出错.那么我们如何保证和避免这种问题出现呢? 那就是XSD, ...
- 云图说|ModelArts开发环境,让AI开发、探索、教学更简单
摘要:ModelArts开发环境,以云原生的资源使用和开发工具链的集成,目标为不同类型AI开发.探索.教学用户. 本文分享自华为云社区<[云图说]| 第280期 ModelArts开发环境,让A ...