Splay树
文章平均质量分 77
nuaalida
这个作者很懒,什么都没留下…
展开
-
Splay树的基本写法
//node为节点类型,其中ch[0]表示左结点指针,ch[1]表示右节点指针 //pre表示指向父亲的指针 void Rotate(node *x,int c) //旋转操作,c=0表示左旋,c=1表示右旋 { node *y= x->pre; Push_Down(y), Push_Down(x); //先将Y节点的标记乡下传递(因为Y在上面),再把X的标记向下传递原创 2013-08-11 17:19:50 · 522 阅读 · 0 评论 -
splay树解决NOI的郁闷的出纳员
#include #include #include using namespace std; struct node { int money, delta; int sum,ld,rd; node *lch,*rch,*fa; int calc_tot(){ return (this==NULL ? 0:ld+rd+原创 2013-07-27 18:49:31 · 588 阅读 · 0 评论 -
UVa11922 Splay树
题意:给定初始的n个数的排列,然后把[a,b]区间的数取出来反转一下放到最后,就是left,mid,right,转成:left,right,mid。 利用slpay的把任意一个特定点旋转到根节点的思路,再利用线段树懒惰标记的思路,该节点的子树需要反转,flip置为1,否则为0,然后每次旋转时(事实上是每次用到该节点,就要pushdown,maintain,这点想清楚)再执行pushdown,ma原创 2013-11-05 21:26:13 · 582 阅读 · 0 评论 -
UVa11996 splay树(WA)
写了200多行,总是WA,我也实在看不出哪里错了。。 估计问题还在于翻转和查询LCP的地方,可是用10以内的小数据测怎么变都是对的。。 郁闷ing。。 #include #include #include #include #include using namespace std; //#define N 400000+5 #define N 200 #define x 89原创 2013-11-08 14:22:57 · 461 阅读 · 0 评论