树链剖分
Sirius_Ren
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇自己刮~~~
展开
-
SPOJ 375 树链剖分
思路: 链剖裸题……//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 22222char ch[11];int n,cases,root,tree[N*4],xx,yy,ans;int tot,first[N],next[N],v[N]原创 2016-08-31 14:54:46 · 326 阅读 · 0 评论 -
BZOJ 3626 离线+树链剖分+线段树
思路: 抄一波yousiki的… 显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 +1,对于 l 到 r 之间的点询问他们到根路径上的点权和。仔细观察上面的暴力不难发现,原创 2017-01-19 07:51:28 · 411 阅读 · 0 评论 -
BZOJ 4448 主席树+树链剖分(在线)
为什么题解都是离线的…… (抄都没法抄) 搞一棵主席树 1 操作 新树上的当前节点设成1 2 操作 查max(i-xx-1,0)那棵树上这条路径上有多少个点是1 让你找经过了多少个点 查的时候用deep 搞出来就好了//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using n原创 2017-01-07 16:31:59 · 701 阅读 · 0 评论 -
BZOJ 3083 树链剖分+倍增+线段树
思路: 先随便选个点 链剖+线段树 1操作 就直接改root变量的值 2操作 线段树上改 3操作 分成三种情况 1.new root = xx 整个子树的min就是ans 2. lca(new root,xx) !=xx query 一下 当前的标号 和当前的标号+size(链剖不就是个特殊的dfs序嘛) 3. lca(new root,xx) =xx 找一下root原创 2017-01-06 14:18:20 · 441 阅读 · 0 评论 -
BZOJ 1146 二分+链剖+线段树+treap
思路: 恶心的数据结构题……首先 我们 链剖 把树 变成序列 再 套一个 区间 第K大就好了…… 复杂度(n*log^4n)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 88888#define inf 1000000原创 2016-12-12 10:46:49 · 631 阅读 · 0 评论 -
BZOJ 2836 树链剖分+线段树
思路: 链剖+线段树裸题重链的标号就是DFS序所以查子树的时候每回就 query(change[x],change[x]+size[x]-1) 就好了剩下的应该都会吧。。//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define int long lon原创 2016-11-11 16:49:42 · 799 阅读 · 0 评论 -
POJ 1986 裸的LCA
思路:搞了一发链剖//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 88888int n,m,first[N],next[N],v[N],w[N],tot,xx,yy,zz,k;int top[N],size[N],deep[N],son[原创 2016-10-26 11:15:17 · 200 阅读 · 0 评论 -
BZOJ 3631 链剖+差分
思路: 1.树链剖分+用带标记的线段树维护操作(复杂度O(nlog2n)) 2.树链剖分LCA(TarjanLCA等各种LCA)+差分 复杂度(O(n)—>O(nlogn)之间) 下面就说说怎么差分…… 把mark[x]++,mark[y]++,mark[lca(xx,yy)]–,mark[fa[lca(xx,yy)]]–; 最后输出的时候要把 不是a[1]的节点–。 搞定~~~//B原创 2016-10-15 16:32:49 · 574 阅读 · 0 评论 -
POJ 3237 树链剖分+线段树
思路:树链剖分+线段树纯自己瞎想的 想到哪儿就写哪儿,,, 所以调了一下午+一晚上…..【尴尬】#include <cstdio>#include <cstring>#include <algorithm>#define N 22222using namespace std;char ch[11];int cnt=0,rec[N],top[N],fa[N],deep[N];in原创 2016-08-31 23:27:11 · 327 阅读 · 0 评论 -
BZOJ 4012 树链剖分+主席树
//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define int long long#define N 300050int n,Q,A,age[N],w[N],v[N],next[N],first[N],tot,rev[N],root[N];int原创 2017-01-29 21:21:11 · 548 阅读 · 0 评论