pat1057 stack
超时算法,利用2的特殊性,用2个multiset来维护。单个multiset维护没法立即找到中位数。
其实也可以只用1个multiset,用一个中位指针,++,--来维护中位数。
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<string>
#include<map>
#include<stack>
#include<set>
using namespace std;
typedef long long ll;
const int maxn = 1e4 + 7;
int n;
multiset<int> up, lo;
stack<int> sta;
void adapt() {
int cnt = up.size() + lo.size();
int upsz = ceil(cnt / 2.0);
while (up.size() < upsz) {
up.insert(*lo.begin());
lo.erase(lo.begin());
}
while (up.size() > upsz) {
int x = *up.rbegin();
lo.insert(x);
up.erase(up.find(x));
}
}
void push(int x) {
up.insert(x);
adapt();
}
int peek() {
return *(up.rbegin());
}
void pop(int x) {
if (up.find(x) != up.end())
up.erase(up.find(x));
else
lo.erase(lo.find(x));
adapt();
}
int main() {
freopen("in.txt", "r", stdin);
cin >> n;
while (sta.empty() == false)
sta.pop();
up.clear(), lo.clear();
char cmd[13];
int x;
while (n--) {
cin >> cmd;
if (cmd[1] != 'u') {
if (lo.empty() && up.empty()) {
puts("Invalid");
continue;
}
if (cmd[1] == 'o') {
int x = sta.top();
sta.pop();
cout << x << endl;
pop(x);
} else if (cmd[1] == 'e') {
cout << peek() << endl;
}
} else {
cin >> x;
sta.push(x);
push(x);
}
}
return 0;
}
此题正解树状数组
#include<stdio.h>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
;
int c[N];
int lowbit(int i){
return i&(-i);
}
void add(int pos,int value){
while(pos<N){
c[pos]+=value;
pos+=lowbit(pos);
}
}
int sum(int pos){
;
){
res+=c[pos];
pos-=lowbit(pos);
}
return res;
}
int find(int value){
,r=N-,median,res;
){
==)
median=(l+r)/;
else
median=(l+r-)/;
res=sum(median);
if(res<value)
l=median;
else
r=median;
}
;
}
int main(){
//freopen("D://test.txt","r",stdin);
];
,n,pos;
memset(c,,sizeof(c));
scanf("%d",&n);
while(n--){
scanf("%s",ss);
]=='u'){
scanf("%d",&pos);
stack[++top]=pos;
add(pos,);
}]=='o'){
){
printf("Invalid\n");
continue;
}
int out=stack[top];
add();
printf("%d\n",stack[top--]);
}]=='e'){
){
printf("Invalid\n");
continue;
}
int res;
==)
res=find(top/);
else
res=find((top+)/);
printf("%d\n",res);
}else{
printf("Invalid\n");
}
}
;
}
类似题目:zoj3612
pat1057 stack的更多相关文章
- pat1057. Stack (30)
1057. Stack (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Stack is one of ...
- PAT1057 Stack(树状数组+倍增)
目录 题目大意 题目分析 题目大意 要求维护一个栈,提供压栈.弹栈以及求栈内中位数的操作(当栈内元素\(n\)为偶数时,只是求第\(n/2\)个元素而非中间两数的平均值).最多操作100000次,压栈 ...
- PAT1057 stack(分块思想)
1057 Stack (30分) Stack is one of the most fundamental data structures, which is based on the princ ...
- PAT-1057 Stack (树状数组 + 二分查找)
1057. Stack Stack is one of the most fundamental data structures, which is based on the principle of ...
- PAT甲级1057. Stack
PAT甲级1057. Stack 题意: 堆栈是最基础的数据结构之一,它基于"先进先出"(LIFO)的原理.基本操作包括Push(将元素插入顶部位置)和Pop(删除顶部元素).现在 ...
- 线性数据结构之栈——Stack
Linear data structures linear structures can be thought of as having two ends, whose items are order ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder
Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...
随机推荐
- PowerDesigner新装后的设置
1.设置name不自动等于code 1.1菜单栏选择tools,选择general Options,打开如图1所示界面 1.2选择Dialog,勾掉红框中复选框,点OK即可
- linux原始套接字(3)-构造IP_TCP发送与接收
一.概述 tcp报文封装在ip报文中,创建tcp的原始套接字如下: sockfd = socket ...
- scala 第一课
val msg="Hello,World" Scala 可以根据赋值的内容推算出变量的类型.这在Scala语言中成为"type inference". Scal ...
- JavaScript继承方式详解[转]
js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现 ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- hdu-5127------hdu5137
hdu-5127 思路: 本来正解好像是动态凸包,暴力10000+ms可以搞过去; hdu-5128 思路: 枚举两个长方形的对角线,然后判断是否不相交,更新答案就好; hdu-5130 思路: 将题 ...
- NYOJ-取石子(二)
取石子(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 小王喜欢与同事玩一些小游戏,今天他们选择了玩取石子. 游戏规则如下:共有N堆石子,已知每堆中石子的数量,并且 ...
- 第15章 设备无关位图_15.2 显示和打印DIB
15.2.1 探究DIB (1)DIB文件的结构 整个文件 紧凑DIB(整个文件除文件头) 文件头(File Header) 信息头(Information Header) 信息头(Informati ...
- [No00004E]千万不要“拼命”工作——写在滴滴总裁柳青患癌症之后
滴滴快的总裁柳青发内部信,透露自己检查出乳腺癌,她今年才37岁. 9月30日,就是国庆前一天,柳青发了内部信,透露了这个消息,她也说已经做完肿瘤摘除手术,"目前感觉还挺好的".她也 ...
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
时间 2014-03-18 18:00:55 eoe博客 原文 http://my.eoe.cn/916054/archive/24053.html 主题 安卓开发 自从Android3.0引入了F ...