树链剖分
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[扫描线 树链剖分 树状数组] BZOJ2758 [SCOI2012]Blinker的噩梦
扫描线 一般扫描线的做法就是想象一根线向某个方向扫过,进入的进入,出去的出去,用一个set维护序列或是结合线段树,当然最恶心的就是加上计算几何但是落实到这题上就是各种鬼畜乱搞,只能膜大神省选前做难题的结果是——到处翻题解,程序越改越像“题意:平面上有n个多边形(凸包和圆)。任意两个多边形AB只有两种关系:(1)A包含B或者B包含A;(2)AB的公共面积为0。每个多边形有一个原创 2016-03-18 20:25:36 · 1465 阅读 · 0 评论 -
[树链剖分 可持久化线段树 垃圾数据结构题] Codechef JUNE17 #OAK Persistent oak
垃圾数据结构题大概就是维护树上的点离最大承重还差多少 然后断掉的就是到根路径上最早的小于0的地方 断掉后 到根路径还剩的承重都要加上掉下的重量 就是一颗线段树满足区间加 区间求min鄙视CC强行可持久化 硬上主席树标记永久化#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x)原创 2017-06-13 20:38:34 · 510 阅读 · 0 评论 -
[长链剖分] BZOJ 1758 [Wc2010]重建计划
关于长链剖分 两个应用 O(n)O(n) 统计每个点子树中可合并的以深度为下标的信息经过一些预处理,单次O(1)O(1)在线查询一个点的kk级祖先这题二分答案后就是求长度在区间内的最长链 然后就记录下某个深度的最大dis 长链剖分加线段树 维护 O(nlog2n)O(n\log ^2n) 从轻儿子合并来的时候顺便更新答案竟然比点分慢#include<cstdio>#include<cst原创 2017-05-19 21:08:21 · 1073 阅读 · 0 评论 -
[树链剖分] BZOJ 4811 [Ynoi2017]由乃的OJ
怎么这么眼熟 BZOJ 2908 又是nand? 复杂度?O(64∗nlog2n)O(64*n\log^2n) 吃不消吧 然后发现我写的是假题解 什么三十二颗线段树 明明可以压位在一起orz 维护上面说的这个东西并不需要64*2个bool变量,而是可以压到两个unsigned long long里,分别代表每一位输入为0和每一位输入为1。 将两个合并:若输入为0,经过左变量后某些bi原创 2017-05-05 08:51:54 · 531 阅读 · 0 评论 -
[点双连通分量 缩点 树链剖分] Codeforces 487E #278 (Div. 1) E. Tourists
点双连通分量的缩点技巧来自:http://blog.csdn.net/a_crazy_czy/article/details/52244069在这里我们使用这样一种方法:对于每一个点双连通分量,我们建一个新建点储存点双所有点的最小权值,然后该点向点双内所有不是深度最小的点连一条边,然后深度最小的点(大多情况为割点,当然树根不一定是割点)向这个新建点连边。 注意到这棵树一定是普通原创 2016-12-24 15:57:12 · 652 阅读 · 0 评论 -
[鬼畜 树链剖分 线段树] BZOJ 2814 tree
类似最大子段和去搞 可以把两头看成各有两个接口 然后随意维护十几个值搞搞搞打了一中午 调了一晚上 发现看错题 改了改 调到睡觉心累#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*原创 2016-09-04 07:56:56 · 618 阅读 · 0 评论 -
[树链剖分 线段树] BZOJ 4127 Abs
每个点只可能从负到正一次暴力开两棵线段树分别维护正负均摊nlogn原创 2016-08-23 18:19:45 · 592 阅读 · 0 评论 -
[树链剖分 线段树 标记永久化] BZOJ 4515 [Sdoi2016]游戏
想到了维护 ax+b 但不知道怎么修改 然后就听说了标记永久化 对于两个直线方程 把决定范围小的下放到子树中树链剖分两个log,标记一次最多下推log层三个log复杂度好虚#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],原创 2016-04-22 10:26:43 · 887 阅读 · 0 评论 -
[二分答案 树链剖分] BZOJ 4326 NOIP2015 运输计划
考虑二分把所有超过mid的链取交集,然后取交集上最长的边权赋0,判断#include#include#include#define V G[p].vusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+frea原创 2016-04-22 10:19:45 · 654 阅读 · 0 评论 -
[树链剖分 线段树 堆] BZOJ 4538 [Hnoi2016]网络
裸的树链剖分线段树里套个堆 最暴力的打法还有一种做法是考虑二分答案,如果大于答案的边都经过询问点,则往小的二分否则往大的二分。这样我们只要维护路径的交集。用rmq求lca的话可以做到O(1)求出两条路径的交集。可以离散后用线段树维护二分结构,并在对应的节点上记录路径交集O(logn)内回答询问了。原创 2016-04-21 13:32:40 · 508 阅读 · 0 评论 -
[树链剖分 线段树] BZOJ 2908 又是nand
树剖 然后开32棵线段树 记录1/0 从左/右 经过 变成的值然后就是一些区间合并成一条有向路径#include#include#include#define V G[p].v#define nand(x,y) (!((x)&(y)))#define digit(x,k) (((x)>>((k)-1))&1)using namespace std;typedef lo原创 2016-04-19 18:41:43 · 775 阅读 · 0 评论 -
[树链剖分 线段树] BZOJ 3531 [Sdoi2014]旅行
树链剖分 给每一个信仰开一棵线段树然后就是动态开点的打码问题了#include#include#include#include#define V G[p].vusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-04-12 19:54:43 · 375 阅读 · 0 评论 -
[链分治 重链剖分 FWT] BZOJ 4911 [Sdoi2017]切树游戏
我链分治是从immortalCO今年论文学来的 就是一个序列上能够维护的东西,把他搬到重链上,先处理好儿子重链的答案,然后把对这条重链上的影响累加在这条重链上然后就是套路 FWT一下就能加和乘了 注意0没有逆元复杂度O(mnlog2n)O(mn\log^2n) 实际上树链剖分是跑不满的 rank1 开心 O(∩_∩)O~~#include<cstdio>#include<cstdlib>#原创 2017-06-09 14:44:47 · 2065 阅读 · 0 评论