简单列了一点 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 1.2 中级数据结构 1. 堆 2. 并查集与带权并查集 3. hash 表 自然溢出 双hash 1.3 高级数据结构 1. 树状数组 2. 线段树,线段树合并 3. 平衡树 T ...
分类:
编程语言 时间:
2019-05-19 14:20:40
阅读次数:
151
题目描述: bzoj3545,luogu bzoj3551 题解: 重构树+线段树合并。 可以算是板子了吧。 代码(强制在线): #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int ...
分类:
其他好文 时间:
2019-05-07 15:30:55
阅读次数:
128
原文链接 www.cnblogs.com/zhouzhendong/p/UOJ400.html 前言 老年选手没有码力。 题解 先对第一棵树进行边分治,然后,设点 x 到分治中心的距离为 $D[x]$,点 x 在原树上的深度为 $d[x]$,那么 $$d[x]+d[y] - d[LCA(x,y)] ...
分类:
其他好文 时间:
2019-05-02 20:13:36
阅读次数:
167
题目链接 题意:统计树上每个结点中恰好出现了k次的颜色数。 dsu on tree/线段树合并裸题。 启发式合并1:(748ms) 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int ...
分类:
其他好文 时间:
2019-05-01 23:58:29
阅读次数:
207
"传送门" 树上差分+线段树合并+离散化 对于修改的路径,树上差分就好了 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok ...
分类:
其他好文 时间:
2019-03-26 22:38:38
阅读次数:
173
大意: 给定有根树, 每个点$x$有权值$a_x$, 对于每个点$x$, 求出$x$子树内所有点$y$, 需要满足$dist(x,y)<=a_y$. 刚开始想错了, 直接打线段树合并了.....因为范围是$long \space long$常数极大, 空间很可能会被卡, 不过竟然过了. 实际上本题每 ...
分类:
其他好文 时间:
2019-03-26 01:18:15
阅读次数:
228
"link" 题目大意:给以1为根的一棵树,求树上每个点子树中出现次数最多的权值(如果有多个就求他们的和) 对每个点开一个线段树维护子树内权值的桶,dfs时候线段树合并就行了。 因为最后线段树一共插入最多 $O(n\log n)$ 个节点,每个节点最多会被合并一次,所以复杂度是 $O(n\log n ...
分类:
其他好文 时间:
2019-03-24 09:55:52
阅读次数:
167
树上LIS:树上找一条简单路径的子序列使点权严格单增,最大化长度。 原题数据过小,用线段树合并可以做到$O(n\log n)$。 每个点用一棵线段树维护以每个权值为结尾的LIS最长长度,线段树合并时更新子序列不包含当前点时的最大值,再线段树上区间询问得到包含时的最大值并更新线段树。 ...
分类:
其他好文 时间:
2019-03-22 00:42:54
阅读次数:
140
"题目链接 $Click$ $Here$" 线段树合并,没想到学起来意外的很简单,一般合并权值线段树。 建树方法和主席树一致,即动态开点。合并方法类似于$FHQ$的合并,就是把两棵树的信息整合到一个里面。暂时没写过定义域不同的线段树合并,具体方法也想象不出来,写到了再详细讲吧。 算法复杂度:均摊$O ...
分类:
其他好文 时间:
2019-03-18 21:07:41
阅读次数:
177
求所有可能联通块的第k大值的和,考虑枚举这个值: $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[i是第K大]}}$ 设cnt[i]为连通块中值>=i的个数 $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[cnt[i ...
分类:
其他好文 时间:
2019-03-10 13:33:58
阅读次数:
192