用這兩道題學了下splay,也加深了對其的理解。
平衡樹的標記與線段樹的標記不同,在平衡樹中,所有被訪問的節點一定不能有標記;否則將其splay後就找不到其原先的左右子樹了。
**(資料結構1):
#include#include#include#includeusing namespace std;
#include#includestruct ss*null=new ss((ss)),*root;
inline void zig(ss * x,bool d)
inline void splay(ss * x)
root=x;
//cout<<"s:(""data<<"->"datax->x+=a;
x->delta+=a;
}inline void pushdown(ss * x)
}inline ss * find(ss * x,int a)
int n;
inline void prt(ss * x)
char * ptr=(char *)malloc(5000000);
inline int in()
int main());
ss * tmp=root;
for(int i=2;i<=n;++i));
tmp=tmp->c[1];
}tmp->c[1]=new ss((ss));
int l,r;
while(m--)
}prt(root);
}
**(資料結構2):
#includeusing namespace std;
#include#include#include#includechar * ptr=(char *)malloc(5000000);
inline int in()
struct ss* null=new ss((ss)),* root=new ss((ss));
inline void zig(ss * x,bool w)
inline void splay(ss * x)
root=x;
}#define re(x) x=-x;
inline void paint(ss * x,int b,int c)
x->flagc+=c;
x->x+=c;
//cout<<"paint("}inline void pushdown(ss * x)
}inline ss * find(int a)
pushdown(x);
return x;
}int n;
inline void prt(ss * x)
}int main());
tmp=tmp->c[1];
}tmp->c[1]=new ss((ss));
int l,r;
while(m--)
prt(root);
}
資料結構 解題報告
給乙個長為 n 的 a 定義 n times n 的 b sum limits ra i 兩個操作,修改 a p 為 x 詢問 b 的歷史最小值。我居然把d1t1鴿到d4晚上.歷史最值 kd tree 先離線的把點放到kd tree中 要離散化 然後就是矩形加和單點查詢,打一下歷史最值的標記就好了 ...
排列組合(permutation)系列解題報告
本文解說4道關於permutation的題目 1.permutation 輸出permutation 基礎遞迴 2.permutation sequence 輸出字典序排列的第k個permutation 推理 3.next permutation 給定乙個permutation中的序列,求字典序它的...
資料結構系列( )樹狀結構
樹 是有乙個或乙個以上的節點組成,存在乙個特殊的節點,稱為樹根。每個節點是一些資料和指標組合而成的記錄。除了樹根,其餘節點可分為n 0個互斥的集合,其中每乙個子集合本身也是一種樹狀結構,即此根節點的子樹。此外一棵合法的樹,節點間可以互相連線,但不能形成無出口的迴路。度數 每個節點所有子樹的個數。層數...