左偏树_算法
JueFan 一只绝帆
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int find(int x) {return x^f[x]?f[x]=find(f[x]):x;}
int mer(int x,int y) {
if(!x||!y) return x|y;
if(a[x]>a[y]||(a[x]==a[y]&&x>y)) swap(x,y);//保留更优者放在上面
r(x)=mer(r(x),y);
if(q[l(x)]<q[r(x)]) swap(l(x),r(x));//保证左偏
q[x]=q[r(x)]+1;f[x]=f[l(x)]=f[r(x)]=x;
return x;
}
int pop(int x) {
f[l(x)]=l(x);f[r(x)]=r(x);
f[x]=mer(l(x),r(x));q[x]=-1;
return a[x];
}
main():q[0]=-1;

这个代码压不太下来,不像可爱的 treap

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 231.7k 访客数 访问量