用两个栈模拟,并保存每个点的时间戳。每次合并的时候记录合并时的时间戳mcnt和此时的topa和topb记做ta、tb。

每次pop的时候,如果栈的top的时间戳大于mcnt,则普通地pop,否则就在两个栈ta和tb下面找时间戳最大且还没pop掉的。然后用bj[时间戳]来标记已经pop了。

#include <cstdio>
#include <cstring>
#define N 100005
using namespace std;
struct node{
int id,v;
}a[N],b[N];
int bj[N],n,topa,topb,cnt,ele,ta,tb,mcnt,cas;
char op[],st;
void popc(){
while(bj[a[ta].id])ta--;
while(bj[b[tb].id])tb--;
if(a[ta].id>b[tb].id){
printf("%d\n",a[ta].v);
bj[a[ta].id]=;
}else {
printf("%d\n",b[tb].v);
bj[b[tb].id]=;
}
}
int main() {
while(scanf("%d",&n),n){
printf("Case #%d:\n",++cas);
topa=topb=cnt=mcnt=;
memset(bj,,sizeof bj);
for(int i=;i<=n;i++){
scanf("%s %c",op,&st);
if(op[]=='u'){
scanf("%d",&ele);
if(st=='A')
a[++topa]=(node){++cnt,ele};
else
b[++topb]=(node){++cnt,ele};
}else if(op[]=='o'){
if(st=='A'){
if(a[topa].id>mcnt){
printf("%d\n",a[topa].v);
bj[a[topa].id]=;
topa--;
}
else
popc();
}else{
if(b[topb].id>mcnt){
printf("%d\n",b[topb].v);
bj[b[topb].id]=;
topb--;
}
else
popc();
}
}else if(op[]=='e'){
scanf(" %c",&st);
mcnt=cnt;
ta=topa;
tb=topb;
}
}
}
return ;
}

wa了好几发,结果原因是 “if(a[topa].id>mcnt)”写的是>=,为什么等于不可以呢,因为popc函数里没有top--,这样下一次top的值可能已经pop掉了。那如果在popc里面top--呢,也不行,因为pop栈a的ta时,可能在pop栈b,这样to pa--的话就错了。这题用优先队列也很方便。

  

#include <cstdio>
#include <queue>
#define prq priority_queue
#define pii pair<int,int>
#define mp(a,b) make_pair(a,b)
#define cl(a) while(!a.empty())a.pop();
using namespace std;
prq<pii> a,b,c;
int n,cas;
void pop(prq<pii> &q){
if(!q.empty()){
printf("%d\n",q.top().second);
q.pop();
}else{
printf("%d\n",c.top().second);
c.pop();
}
}
void push(prq<pii> &q){
while(!q.empty()){
c.push(q.top());
q.pop();
}
}
int main() {
while(scanf("%d",&n),n){
printf("Case #%d:\n",++cas);
cl(a);cl(b);cl(c);
int cnt=;
while(n--){
char op[],st;
scanf("%s %c",op,&st);
if(op[]=='u'){
int x;
scanf("%d",&x);
if(st=='A') a.push(mp(++cnt,x));
else b.push(mp(++cnt,x));
}else if(op[]=='o'){
if(st=='A') pop(a);
else pop(b);
}else{
scanf(" %c",&st);
push(a);push(b);
}
}
}
}

【HDU 5818多校】Joint Stacks的更多相关文章

  1. HDU 5818:Joint Stacks(stack + deque)

    http://acm.hdu.edu.cn/showproblem.php?pid=5818 Joint Stacks Problem Description   A stack is a data ...

  2. HDU 5818 Joint Stacks(联合栈)

    HDU 5818 Joint Stacks(联合栈) Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  3. HDU 5818 Joint Stacks (优先队列)

    Joint Stacks 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818 Description A stack is a data stru ...

  4. HDU 5818 Joint Stacks

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. hdu 5818 Joint Stacks (优先队列)

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  6. 2016暑假多校联合---Joint Stacks (STL)

    HDU  5818 Problem Description A stack is a data structure in which all insertions and deletions of e ...

  7. 多校7 HDU5818 Joint Stacks

    多校7 HDU5818 Joint Stacks 题意:n次操作.模拟栈的操作,合并的以后,每个栈里的元素以入栈顺序排列 思路:开三个栈,并且用到了merge函数 O(n)的复杂度 #include ...

  8. 暑假练习赛 004 E Joint Stacks(优先队列模拟)

    Joint StacksCrawling in process... Crawling failed Time Limit:4000MS     Memory Limit:65536KB     64 ...

  9. HDU5818 Joint Stacks

    Joint Stacks                                                                       Time Limit: 8000/ ...

随机推荐

  1. mui禁止横屏显示,仅支持竖屏显示

    mui.plusReady(function () { plus.screen.lockOrientation("portrait-primary"); });

  2. javascript动态创建script标签,加载完成后调用回调

    代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('scri ...

  3. js中三个对数组操作的函数 indexOf()方法 filter筛选 forEach遍历 map遍历

     indexOf()方法  indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1. 不使用indexOf时 var arr = ['apple','orange','pea ...

  4. S2总结笔记

    第一章:深入.NET框架 1..NET FrameWork两大组件是什么? 解析:.NET 框架类库(FCL:FrameWork Class Library)和公共语言运行时(CLR:common l ...

  5. SPM12manual,统计部分(8-10)笔记

    fMRI model specifictaion GLM based 包括以下步骤:①明确GLM设计矩阵:②用经典或贝叶斯方法估计GLM参数:③利用对比向量检查结果,生成统计参数图(SPMs)以及后验 ...

  6. SharePoint Foundation 2013 with SP1

    终于支持在 Windows Server 2012 R2 上安装了. 下载 另外,还有一个针对SharePoint Foundation 2013的重要更新.可以在安装SP1之前或之后安装. Micr ...

  7. node基础01:简要介绍

    1.node vs php 优点 性能高(机制问题) 开发效率高(省了不少优化的事) 应用范围广(可以开发桌面系统,electron框架) 缺点 新,人少 中间件少 IDE不完善 2.node的劣势和 ...

  8. "org.jboss.netty.internal.LoggerConfigurator".DESCRIBED is already registered 的解决办法

    今天在jboss 6.2 EAP上部署一个项目时,报以下错误: org.jboss.msc.service.DuplicateServiceException: Service jboss.pojo. ...

  9. TinyFrame升级之九:实现复杂的查询

    本章我们主要讲解如何实现一个复杂的查询.由于目前TinyFrame框架已经投入到了实际的项目生产中,所以我很乐意将项目中遇到的任何问题做以记录并备忘. 这章中,我们提到的查询界面如下所示: 其中,涉及 ...

  10. SUBLIME TEXT 2中,光标移入移出括号的快捷键设置

    无赖右方向键→和End键都在键盘的另一边,每次输入完一个函数,光标在各种括号中间,有什么更好的方式将光标移出来呢?在Sublime Text 2中,我们可以自己设置快捷键: { "keys& ...