hdu-5818-Joint Stacks-栈模拟/左偏树
来源:互联网 发布:啪啪啪软件下载 编辑:程序博客网 时间:2024/04/30 05:30
题意:给A,B两个栈,
三种操作,push pop, merge
可以直接模拟,因为保证了无pop空操作。
不过也是左偏树的经典操作咯。
nlogn复杂度
//左偏树,hdu5818#include <bits/stdc++.h>using namespace std;struct node{ int t,x; node(){} node(int a,int b) { t=a,x=b; } bool operator <(const node &b)const { return t<b.t; }};const int maxn = 152400;node v[maxn];int tot, l[maxn], r[maxn], d[maxn];//id[x]表示x所在树的编号int Merge(int x, int y){ if(!x) return y; if(!y) return x; if(v[x] < v[y]) swap(x, y); r[x] = Merge(r[x], y); if(d[l[x]] < d[r[x]]) swap(l[x], r[x]); d[x] = d[r[x]] + 1; return x;}int init(node x){ tot++; v[tot] = x; l[tot] = r[tot] = d[tot] = 0; return tot;}int Insert(int x, node y){ return Merge(x, init(y));}node top(int x){ return v[x];}int pop(int x){ return Merge(l[x], r[x]);}char op[30], str[30], str2[30];int val;int main(){ int cnt = 1; int N; while(scanf("%d", &N)&& N) { memset(v, 0, sizeof(v)); memset(l, 0, sizeof(l)); memset(r, 0, sizeof(r)); memset(d, 0, sizeof(d)); tot = 0; printf("Case #%d:\n", cnt++); int posA = init(node(-1, -1)); int posB = init(node(-2, -1)); for(int i = 1; i <= N; ++i) { scanf("%s%s", op, str); if(op[1] == 'u') { scanf("%d", &val); if(str[0] == 'A') { posA = Insert(posA, node(i, val)); } else { posB = Insert(posB, node(i, val)); } } else if(op[1] == 'o') { node ans; if(str[0] == 'A') { ans = top(posA); posA = pop(posA); } else { ans = top(posB); posB = pop(posB); } printf("%d\n", ans.x); } else if(op[1] == 'e') { scanf("%s", str2); if(str[0] == 'A') { posA = Merge(posA, posB); posB = init(node(-1, -1)); } else { posB = Merge(posA, posB); posA = init(node(-1, -1)); } } } } return 0;}
0 0
- hdu-5818-Joint Stacks-栈模拟/左偏树
- HDU 5818 Joint Stacks [栈]【模拟】
- HDU 5818 Joint Stacks 栈模拟
- hdu 5818 Joint Stacks (模拟)
- HDU-5818-Joint Stacks-模拟
- HDU 5818 Joint Stacks 模拟
- HDU 5818 Joint Stacks(左偏树)
- hdu 5818 Joint Stacks 栈
- hdu 5818 Joint Stacks (模拟 技巧)
- 模拟(Joint Stacks,HDU 5818)
- hdu 5818 Joint Stacks
- HDU 5818 Joint Stacks(左偏树)
- HDU 5818 Joint Stacks(栈)
- HDU 5818 Joint Stacks(模拟 || 优先队列 || 左式堆)
- hdu 5818 Joint Stacks 静态链表+栈
- 【HDU5818】Joint Stacks(模拟)
- HDOJ 5818 Joint Stacks(栈)
- 2016多校7 HDU 5818 Joint Stacks
- 数据结构实验之查找四:二分查找
- C3P0方法中fanh类型转换
- toolar与drawerlayout的使用
- 为什么php要学习面象对象编程
- android布局优化
- hdu-5818-Joint Stacks-栈模拟/左偏树
- 在Ubuntu上使用Samba共享Linux内核源码
- Java学习笔记(Java中的数组/循环操作/Arrays类)
- android属性动画的使用
- flatMap与map的区别
- javascript RegExp对象
- android帧动画的使用
- hdu3388容斥还有二分
- android主题的切换