设为首页 加入收藏

TOP

HDU 3726 Graph and Queries treap树
2015-07-20 17:46:28 来源: 作者: 【 】 浏览:1
Tags:HDU 3726 Graph and Queries treap

题目来源:HDU 3726 Graph and Queries

题意:见白书

思路:刚学treap 参考白皮书

#include 
  
   
#include 
   
     #include 
    
      using namespace std; struct Node { Node *ch[2]; int r; int v; int s; Node(int v): v(v) { ch[0] = ch[1] = NULL; r = rand(); s = 1; } bool operator < (const Node& rhs) const{ return r < rhs.r; } int cmp(int x) const{ if(x == v) return -1; return x < v ? 0 : 1; } void maintain(){ s = 1; if(ch[0] != NULL) s += ch[0]->s; if(ch[1] != NULL) s += ch[1]->s; } }; void rotate(Node* &o, int d){ Node* k = o->ch[d^1]; o->ch[d^1] = k->ch[d]; k->ch[d] = o; o->maintain(); k->maintain(); o = k; } void insert(Node* &o, int x){ if(o == NULL){ o = new Node(x); } else{ int d = (x < o->v ? 0 : 1); insert(o->ch[d], x); if(o->ch[d] > o) rotate(o, d^1); } o->maintain(); //printf("--------+%d\n", o->s); } void remove(Node* &o, int x){ int d = o->cmp(x); if(d == -1){ Node* u = o; if(o->ch[0] != NULL && o->ch[1] != NULL){ int d2 = o->ch[0] > o->ch[1] ? 1 : 0; rotate(o, d2); remove(o->ch[d2], x); } else{ if(o->ch[0] == NULL) o = o->ch[1]; else o = o->ch[0]; delete u; } } else remove(o->ch[d], x); if(o != NULL) o->maintain(); }
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 12206 - Stammering Aliens(.. 下一篇★word_break--leetcode--动态规划

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)