平衡树-区间树
geng4512
蛤蛤蛤蛤
展开
-
BZOJ3224:普通平衡树(含SBT、Treap、Splay模板)
传送门 这道题就是裸的平衡树的题目,操作都是模板,也就不多说了,重在代码。SBT:#include<cstdio> struct SBT { int v, sz, ch[2], cnt; } t[300005]; int n, cnt, root; #define Upd(k) {\ t[k].sz = t[t[k].ch[0]].sz + t[t[k].ch[1]].sz + t原创 2015-11-22 16:11:23 · 3153 阅读 · 3 评论 -
POJ2892 Tunnel Warfare (平衡树)
传送门 思路:当炸掉一个城市的时候,就把这个城市放入平衡树中(最开始的时候放入n+1和0),查询的时候输出这个数的后继-前驱-1,这就是答案。代码(写的Splay):#include<cstdio> #define MAXN 50005 struct node { int v, ch[2], f; }t[MAXN]; int rt, sz, n, m; void rot(int x) {原创 2015-11-22 16:17:51 · 988 阅读 · 0 评论 -
POJ3580 SuperMemo(Splay的区间操作)
传送门 第一次写Splay的区间操作,调了5+小时…… **Splay区间操作的核心就是区间的提取 例如:要提取[5, 12] 就要把4 Splay到根,把13 Splay到4的右儿子,那么13的左儿子就是[5, 12]的所有信息。**代码:#include<cstdio> #define MAXN 200005 int tmp; inline void Swap(int &a, int &b原创 2015-11-22 16:38:36 · 1519 阅读 · 0 评论 -
POJ2985 The k-th Largest Group(平衡树查询第K大)
传送门 平衡树查询第k大的裸题,用并查集来维护一下哪些猫是一组的就可以了。查询第k大要维护size域,保存一个节点下面的字数的大小,更新的时候从下边更新。#include<cstdio> #define MAXN 200005 struct SBT { int v, sz, ch[2], cnt; } t[MAXN]; int n, m, cnt, root; #define Upd(k)原创 2015-11-22 16:25:34 · 939 阅读 · 0 评论 -
BZOJ3223: Tyvj 1729 文艺平衡树(Splay) (指针版+数组版)
传送门 Splay的区间翻转:若要翻转[l, r],将l-1 Splay到根,将r+1 Splay到l-1的右儿子,然后[l, r]就在r+1的左儿子的位置了,给它打上标记,完工!#include<cstdio> #define MAXN 200005 int tmp; inline void Swap(int &a, int &b) { tmp = a; a = b; b = tmp; } st原创 2015-11-22 16:43:31 · 788 阅读 · 0 评论 -
BZOJ3173 TJOI2013最长上升子序列(Treap+ZKW线段树)
传送门Description给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少?Input第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N)OutputN行,第i行表示i插入Xi位置后序列的最长上升子序列原创 2016-02-14 20:13:35 · 695 阅读 · 0 评论 -
BZOJ4170 极光(CDQ分治 或 树套树)
传送门 BZOJ上的题目没有题面…… 【样例输入】 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 【样例输出】 2 3 3这道题稍微分析一下就知道是求一个一个点曼哈顿距离小于k的的范围内的点的个数(把下标看做x,把值看做y)。然后我们只需要旋转一下坐标轴就变成了和“Mokia”或“简单题”一样原创 2016-03-06 15:56:38 · 1248 阅读 · 1 评论