zoukankan      html  css  js  c++  java
  • 「学习笔记」左偏树

    //合并 
    int merge(int x,int y){
    	if(!x || !y) return x|y;
    	if(t[x].key>t[y].key) swap(x,y);
    	t[t[x].rs=merge(t[x].rs,y)].fa=x;
    	if(t[t[x].rs].d>t[t[x].ls].d) swap(t[x].ls,t[x].rs);
    	t[x].d=t[t[x].rs].d+1;
    	return x;
    }
    //构建
    void build(){
    	int l=1,r=n;
    	for(int i=1;i<n;i++){//可证只有n-1次合并
    		h[++r]=merge(h[l],h[l+1]);
    		l+=2;
    	}
    }
    //删除任意结点(pop)
    void pushup(int x){
    	if(!x) return;
    	if(t[x].d!=t[t[x].rs].d+1){
    		t[x].d=t[t[x].rs].d+1;
    		pushup(t[x].fa);
    	}
    }
    
    int merge(int x,int y){
    	if(!x || !y) return x|y;
    	if(t[x].key>t[y].key) swap(x,y);
    	t[t[x].rs=merge(t[x].rs,y)].fa=x;
    	if(t[t[x].rs].d>t[t[x].ls].d) swap(t[x].ls,t[x].rs);
    	pushup(x);
    	return x;
    }
    
    int pop(int x){
    	return merge(t[x].ls,t[x].rs);
    }
    //整个堆加/减去一个值、乘上一个正数,在根上打标记,下传
    int merge(int x,int y){
    	if(!x || !y) return x|y;
    	if(t[x].key>t[y].key) swap(x,y);
    	pushdown(x);
    	t[t[x].rs=merge(t[x].rs,y)].fa=x;
    	if(t[t[x].rs].d>t[t[x].ls].d) swap(t[x].ls,t[x].rs);
    	pushup(x);
    	return x;
    }
    
    int pop(int x){
    	pushdown(x);
    	return merge(t[x].ls,t[x].rs);
    }
    //随机合并
    int merge(int x,int y){
    	if(!x || !y) return x|y;
    	if(t[x].key>t[y].key) swap(x,y);
    	if(rand()&1) swap(t[x].ls,t[x].rs);
    	t[x].ls=merge(t[x].ls,y);
    	return x;
    }
    //最终的板子
    void pushup(int x){
    	if(!x) return;
    	if(t[x].d!=t[t[x].rs].d+1){
    		t[x].d=t[t[x].rs].d+1;
    		pushup(t[x].fa);
    	}
    }
    
    int merge(int x,int y){
    	if(!x || !y) return x|y;
    	if(t[x].key>t[y].key) swap(x,y);
    	pushdown(x);
    	t[t[x].rs=merge(t[x].rs,y)].fa=x;
    	if(t[t[x].rs].d>t[t[x].ls].d) swap(t[x].ls,t[x].rs);
    	pushup(x);
    	return x;
    }
    
    int pop(int x){
    	pushdown(x);
    	return merge(t[x].ls,t[x].rs);
    }
    
  • 相关阅读:
    23种设计模式(3)-原型模式
    23种设计模式(4)-生成器模式
    优秀程序员应具备的15个特性
    23种设计模式(5)-适配器模式
    23种设计模式(6)-装饰者模式
    23种设计模式(7)-代理模式
    SSH框架面试题集锦
    List,Set和Map详解及其区别和他们分别适用的场景
    (转) 网页浏览速度慢的排查原因
    (转)局域网的某个机器无法上网,的排错思路
  • 原文地址:https://www.cnblogs.com/wzsyyh/p/xxbj-zbs.html
Copyright © 2011-2022 走看看