POJ 3481
HDU 5877
BZOJ 1208
BZOJ 3224 Tyvj 1728
BZOJ 1588
这些题目都很裸,套套模板就能A,所以就放一起了,treap=tree+heap,让数值维持二叉树性质,用随机值维护堆性质(用这个维护树的平衡)
const int N = 100010;
struct Treap{
int l,r; //左,右
int val,dat; //价值,随机值
int cnt,sz; //副本数,子树大小
}t[N];
int tot,root,n,INF = 0x7fffffff;
void init(){tot=0;}
int New(int val){t[++tot].val=val;t[tot].dat=rand();t[tot].l=t[tot].r=0;t[tot].cnt=t[tot].sz=1;return tot;}
void update(int p){t[p].sz=t[t[p].l].sz+t[t[p].r].sz+t[p].cnt;}