• Treap


     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <queue>
     5 #include <cstdio>
     6 #include <algorithm>
     7 #include <map>
     8 #define LL long long
     9 
    10 using namespace std;
    11 
    12 struct Treap_node
    13 {
    14     Treap_node *left,*right;
    15     int value,fix; //the value and the random fix value
    16 }*root;
    17 
    18 void Treap_left_rotate(Treap_node *&a)
    19 {
    20     Treap_node *b = a->right;
    21     a->right = b->left;
    22     b->left = a;
    23     a = b;
    24 }
    25 
    26 void Treap_right_rotate(Treap_node *&a)
    27 {
    28     Treap_node *b = a->left;
    29     a->left = b->right;
    30     b->right = a;
    31     a = b;
    32 }
    33 
    34 void Treap_insert(Treap_node*&p, int value)
    35 {
    36     if(!p)
    37     {
    38         p = new Treap_node;
    39         p->value = value;
    40         p->fix = rand();
    41         p->left = p->right = NULL;
    42     }
    43     else if(value <= p->value)
    44     {
    45         Treap_insert(p->left,value);
    46         if(p->left->fix < p->fix)
    47             Treap_right_rotate(p);
    48     }
    49     else
    50     {
    51         Treap_insert(p->right,value);
    52         if(p->right->fix < p->fix)
    53             Treap_left_rotate(p);
    54     }
    55 }
    56 
    57 void Treap_delete(Treap_node* &p,int value)
    58 {
    59     if(value < p->value)
    60         Treap_delete(p->left,value);
    61     else if(value > p->value)
    62         Treap_delete(p->right,value);
    63     else
    64     {
    65         if(!p->right || !p->left) //link nodes or have no child node
    66         {
    67             Treap_node *t;
    68             t = p;
    69             if(!p->right)
    70                 p = p->left;
    71             else
    72                 p = p->right;
    73             delete t;
    74         }
    75         else
    76         {
    77             if(p->left->fix < p->right->fix)
    78             {
    79                 Treap_right_rotate(p);
    80                 Treap_delete(p->right,value);
    81             }
    82             else
    83             {
    84                 Treap_left_rotate(p);
    85                 Treap_delete(p->left,value);
    86             }
    87         }
    88     }
    89 }
  • 相关阅读:
    ie浏览器报错 DOM7009 无法解码 URL 处的图像 问题的解决方法
    javascript拷贝节点cloneNode()使用介绍
    动态构建 urlpatterns
    request属性
    用户分组权限(模型--登录自带字段)
    模型字段设为可选
    模型 命令
    模板 templates
    动态url加载
    APScheduler实现定时任务
  • 原文地址:https://www.cnblogs.com/henserlinda/p/5730576.html
Copyright © 2020-2023  润新知