摘要: Treap = Tree + heap,Tree是BST,即同时维护二叉查找树和堆的性质 Treap的定义:int ch[maxn][2], val[maxn], siz[maxn], num[maxn], pri[maxn];//此处优先级用了小根堆int... 阅读全文
posted @ 2018-09-05 23:29 Apale 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 一般线段树做区间修改操作时,先是找到目标区间,然后修改该区间,并打下延迟标记,最后从目标区间自底向上,更新所有包含目标区间的区间的值(即pushup)。当该区间子节点被访问前,pushdown下推标记。 这种维护区间的方式存在一点点弊端。例如用这种方式写一棵... 阅读全文
posted @ 2018-08-27 20:24 Apale 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 最近在学splay,就用这道题来记一下模板。splay是二叉搜索树,满足中序遍历有序的性质;同时,splay操作可以在不改变中序序列的前提下改变树的结构。因此,splay可以十分方便地维护区间信息。#includeusing namespace std;co... 阅读全文
posted @ 2018-08-27 14:18 Apale 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题意: 有一个长度为n的数组a,初值均为0,有m组修改,由题目给的一个随机函数生成l, r, v,把a在区间 [ l , r ] 中小于v的值修改为v,最终输出 ⨁i=1n" role="presentation" style="positio... 阅读全文
posted @ 2018-08-09 00:50 Apale 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 题目链接: hdu6315 题目大意: 输入一个n,下一行输入一个长度为n的数组b,b是1到n的一种全排列,还有一个长度为n初值全为0的数组a 两种操作: 1) 输入add l r ,将al" role="presentati... 阅读全文
posted @ 2018-07-26 11:21 Apale 阅读(84) 评论(0) 推荐(0) 编辑
摘要: #includeusing namespace std;const int maxn = 100000+10;int N,M,R,P,w[maxn];struct{ int to,next; }e[maxnsiz[son[u]]) ... 阅读全文
posted @ 2018-07-24 23:52 Apale 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 题意:三种操作,0 e 表示插入一个数字e,1 e 表示删除一个数字e,2 e k 表示查询比e大的第k个数,删除和查询均可能没有目标。思路:建一棵权值线段树,维护每个数字区间中数字的数量。 查询时,先查出1到e的数字数量n,然后查询第k+n大。#inclu... 阅读全文
posted @ 2018-07-18 20:44 Apale 阅读(304) 评论(0) 推荐(1) 编辑
摘要: 题意: 输入N个数字,查询区间[L,R]中有多少个不同的数字(第i个数字为a[i])思路:要维护的是不同的数字的数量,所以每个数只记最后出现的那一次。对N个位置每个位置建一棵线段树,线段树维护的是插入a[i]后树上各区间数字的数量。如果a[i]这个数字在前面... 阅读全文
posted @ 2018-07-18 20:37 Apale 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 实在太蠢了搞不定ST表o(╥﹏╥)o,只能学个倍增法了。讲倍增法前先看看暴力法。 第一步肯定是dfs求每个点的深度。 查询lca(a,b)时,先把ab中深度较大的点往上移,移到两个点深度相同为止; 现在两个点深度相同了,于是两个点一起往上移,直至移到同一个位... 阅读全文
posted @ 2018-07-14 00:51 Apale 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 老板与员工之间是树形关系。每次给一个员工下达任务就是修改这个员工为根的子树。 用dfs序把每一棵子树转化成一个区间,用线段树维护,T就是区间更新维护lazy,C就是单点查询。#include using namespace std;const int max... 阅读全文
posted @ 2018-07-09 19:53 Apale 阅读(124) 评论(0) 推荐(0) 编辑