zoukankan      html  css  js  c++  java
  • 2-3-4 tree留坑

    #include<bits/stdc++.h>
    #define LL long long
    #define pii pair<int,int>
    #define mp make_pair
    using namespace std;
    const int maxx = 2e5+6;
    const double alpha = 0.75;
    struct node{
      int l,ml,mr,r;
      int val[4];
      int size;
      int fa;
    }tree[maxx];
    int cnt=0;
    int root;
    int newnode(int w,int fa){
      tree[++cnt].size=1;
      tree[cnt].val[1]=w;
      tree[cnt].fa=fa;
      return cnt;
    }
    int inserts(int rt,int w){
       int fa;
       if (tree[rt].size==3){
          if (rt==root){
              root=newnode(tree[rt].val[2],-1);
              rt=root;
              tree[root].l=newnode(tree[rt].val[1],root);
              tree[root].ml=newnode(tree[rt].val[3],root);
              tree[tree[root].l].l=tree[rt].l;
              tree[tree[root].l].ml=tree[rt].ml;
              tree[tree[root].ml].l=tree[rt].mr;
              tree[tree[root].ml].ml=tree[rt].r;
          }else {
             int fa=tree[rt].fa;
             if (tree[fa].size==1){
                 if (tree[rt].val[2]<tree[fa].val[1]){
                    tree[fa].mr=tree[fa].ml;
    
                    tree[fa].ml=newnode(tree[rt].val[3],fa);
                    tree[tree[fa].ml].l=tree[rt].mr;
                    tree[tree[fa].ml].ml=tree[rt].r;
    
                    tree[fa].l=newnode(tree[rt].val[1],fa);
                    tree[tree[fa].l].l=tree[rt].l;
                    tree[tree[fa].l].ml=tree[rt].ml;
    
                    tree[fa].val[2]=tree[fa].val[1];
                    tree[fa].val[1]=tree[rt].val[2];
    
                 }else {
                    tree[fa].val[2]=tree[rt].val[2];
                    tree[fa].ml=newnode(tree[rt].val[1],fa);
                    tree[fa].mr=newnode(tree[rt].val[3],fa);
                    tree[tree[fa].ml].l=tree[rt].l;
                    tree[tree[fa].ml].ml=tree[rt].ml;
                    tree[tree[fa].mr].l=tree[rt].mr;
                    tree[tree[fa].mr].mr=tree[rt].r;
                 }
             }else if (tree[fa].size==2){
                 if (tree[rt].val[2]<tree[fa].val[1]){
                    tree[fa].val[3]=tree[fa].val[2];
                    tree[fa].val[2]=tree[fa].val[1];
                    tree[fa].val[1]=tree[rt].val[2];
                    tree[fa].r=tree[fa].mr;
                    tree[fa].mr=tree[fa].ml;
                    tree[fa].ml=newnode(tree[rt].val[3],fa);
                    tree[fa].l=newnode(tree[rt].val[1],fa);
                    tree[tree[fa].ml].l=tree[rt].mr;
                    tree[tree[fa].ml].ml=tree[rt].r;
                    tree[tree[fa].l].l=tree[rt].l;
                    tree[tree[fa].l].ml=tree[rt].ml;
                 }else if (tree[rt].val[2]<tree[fa].val[2]){
                    tree[fa].val[3]=tree[fa].val[2];
                    tree[fa].val[2]=tree[rt].val[2];
                    tree[fa].r=tree[fa].mr;
                    tree[fa].ml=newnode(tree[rt].val[1],fa);
                    tree[fa].mr=newnode(tree[rt].val[3],fa);
                    tree[tree[rt].ml].l=tree[rt].l;
                    tree[tree[rt].ml].ml=tree[rt].ml;
                    tree[tree[rt].mr].l=tree[rt].mr;
                    tree[tree[rt].mr].mr=tree[rt].r;
                 }else {
                    tree[fa].val[3]=tree[rt].val[2];
                    tree[fa].mr=newnode(tree[rt].val[1],fa);
                    tree[fa].r=newnode(tree[rt].val[3],fa);
                    tree[tree[fa].mr].l=tree[rt].l;
                    tree[tree[fa].mr].ml=tree[rt].ml;
                    tree[tree[fa].r].l=tree[rt].ml;
                    tree[tree[fa].r].ml=tree[rt].mr;
                 }
             }
          }
       }
       rt=fa;
       if (w<tree[rt].val[1])
       
    }
    int main(){
      scanf("%d")
      return 0;
    }
    有不懂欢迎咨询 QQ:1326487164(添加时记得备注)
  • 相关阅读:
    excel文件导入mysql
    linux进程后台运行,且关终端后继续运行
    安装windows后grub修复
    华中科技大学 ubuntu14.04源
    Windows8.1远程桌面时提示凭据不工作的解决方案
    引文分析工具HistCite使用简介
    报账单打印
    iOS开发之--复制粘贴功能
    iOS学习之--字符串的删除替换(字符串的常用处理,删除,替换)
    iOS 裁剪View指定的角裁剪
  • 原文地址:https://www.cnblogs.com/bluefly-hrbust/p/11440643.html
Copyright © 2011-2022 走看看