【模板】左偏树

来源:互联网 发布:java 设置特定时间 编辑:程序博客网 时间:2024/06/05 03:10

最常见,同时也是最好写的可并堆

参考博客:左偏树-总结

很久之前写的,请见谅

#include<cstdio>#include<algorithm>using namespace std;const int maxn=100005;struct node{    int l,r,x,d,id;    node(int key=0,int i=0) {l=r=d=0;x=key;id=i;}    bool operator<(const node&b){        return x<b.x||x==b.x&&id<b.id;    }}tre[maxn];int n,q,fa[maxn];bool vis[maxn];inline int red(){    int tot=0,f=1;char ch=getchar();    while (ch<'0'||'9'<ch) {if (ch=='-') f=-f;ch=getchar();}    while ('0'<=ch&&ch<='9') tot=tot*10+ch-48,ch=getchar();    return tot*f;}int getfa(int x){    if (fa[x]==x) return x;    return fa[x]=getfa(fa[x]);}int merge(int a,int b){    if (!a||!b) return a+b;    if (tre[b]<tre[a]) swap(a,b);    tre[a].r=merge(tre[a].r,b);    if (tre[tre[a].l].d<tre[tre[a].r].d) swap(tre[a].l,tre[a].r);    if (!tre[a].r) tre[a].d=0;else tre[a].d=tre[a].r+1;    return a;}int main(){    //do something...    return 0;}
原创粉丝点击