![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
主席树
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[主席树] BZOJ 3524 [Poi2014]Couriers BZOJ 2223 [Coci 2009]PATULJCI
裸题#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } r原创 2016-05-13 16:28:15 · 442 阅读 · 0 评论 -
[缩树 主席树] BZOJ 4539 [Hnoi2016]树
hnoi的大数据结构题把每一个残基缩一下 变成一颗大树 每次新增查询一下是在哪个残基上 这里要用主席树求子树第k大然后记一下到fat的权值然后就各种细节搞lca#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char b原创 2016-09-22 18:44:34 · 411 阅读 · 0 评论 -
[主席树 Kruscal] BZOJ 3545 [ONTAK2010]Peaks & 3551 [ONTAK2010]Peaks加强版
Orz hzwer据出题人的做法。。。就是做最小生成树,但合并两结点x,y的时新建结点ext,把ext连向fa(x),fa(y)这样建出一棵树,ext的权为该边的边权找一个点v不超过x的子树的根,可以用倍增,以它为根的子树就是v不超过x所能到达的连通块dfs序+主席树就行了。。#include#include#include#defin原创 2016-06-24 23:28:13 · 416 阅读 · 0 评论 -
[LCT 主席树] BZOJ 3514 Codechef MARCH14 GERALD07加强版
N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。 先预处理 按时间做一通最大生成树 每次加边 ii 替换树上的最小边 记这条边为 a[i]a[i] 特殊的 如果本来不连通 a[i]=0a[i]=0 如果是自环 a[i]=ia[i]=i对于每个询问[l,r][l,r],统计区间[l,r][l,r]中有多少个数小于ll,用nn去减即可得答案 为什么呢 因为替换了原创 2017-01-31 18:40:27 · 407 阅读 · 0 评论 -
[最短路 主席树 Hash] Codeforces 464E #265 (Div. 1) E. The Classic Problem
很棒的数据结构练习题 因为边权太大了 我们不能直接储存 我们用主席树! 比较直接从高位到低位找第一个不同的位 可以Hash下 每次加法 我们找到这一位之后第一个0 那么0变为1 0之前一连串1都变成0 这里有个小trick可以不用打标记 我们先建一棵全0的线段树 清0直接找到对应节点接上去就好了#include<cstdio>#include<cstdlib>#include<algo原创 2017-03-17 20:53:14 · 808 阅读 · 0 评论 -
[主席树] BZOJ 4771 七彩树
感谢带我飞的rxd大爷我们先考虑不管深度限制可修改我们怎么做就是把每种颜色按照dfs序排列 然后给这些点都+1 但是相邻两个的lca处要-1 这样子树不同颜色数就是子树和然后我们把深度限制 看做按照深度的顺序加点 加点我们需要维护什么 每种颜色的序列 这个用set或平衡树 在序列中插入 我们对前驱后继lca什么瞎处理一通 然后记一下这个版本 也就是在主席树上修改然后一个深度限制 就相当于到那个深度原创 2017-03-12 11:44:25 · 708 阅读 · 0 评论 -
[主席树] BZOJ 4571 [Scoi2016]美味
要是没有加 就是裸的可持久化字典树 其实字典树也就是线段树 按位贪心 然后在主席树上查一下某段是否有数字#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==原创 2017-04-09 20:51:13 · 302 阅读 · 0 评论 -
[dsu on tree 主席树优化建图 最大流] BZOJ 3681 Arietta
这显然是个类似二分图匹配 但直接跑网络流边数承受不了 我们采用套路 用数据结构优化建图 类似vfk的a+b problem我们处理子树问题 有一种方法是按dfs序建主席树 然后就可以用减法取出一段区间 也就是子树的信息 但是在某些情况下不能减 比如在这个网络流里 这样的话 我们就要用一种科技 dsu on tree 相关资料 原文 神犇翻译版本大概意思是 我们用重链剖分的思想 当前子树的原创 2017-04-10 22:39:20 · 1048 阅读 · 0 评论 -
[主席树 Hash] Codechef JUNE17 #CLONEME Cloning
对权值建主席树 然后对于区间[a,b],[c,d] 在主席树上二分排完序后从左第一个不一样的地方 以及从右第一个不一样的地方 这个可以Hash下权值的出现次数,也是可以相减的#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef unsigned long long ull;inlin原创 2017-06-13 20:19:59 · 471 阅读 · 0 评论 -
[主席树区间覆盖 线段树] UNR #1 火车管理
火车管理我们可以建立一颗可持久化线段树,维护每个铁路每个时间的栈顶的吨位和栈顶火车的入栈时间。我们再维护一颗线段树用来统计答案。于是操作就显得很简单了:区间询问:直接在答案线段树里询问即可。区间压数:在可持久化线段树上进行区间覆盖,这个是十分基础的数据结构技巧,然后在答案线段树上修改一下。区间弹数:由于我们记录了入栈时间,所以我们删完后用原创 2016-07-20 09:24:53 · 427 阅读 · 0 评论 -
[决策单调性 分治 主席树] BZOJ 4367 [IOI2014]holiday假期
比较显然的做法 枚举l,r 然后主席树这题有很多单调性可以利用对一个确定的l 最优的r 是单调的 来分治#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if原创 2016-07-05 16:25:17 · 504 阅读 · 0 评论 -
[主席树套堆 区间修改 标记永久化] BZOJ 3489 A simple rmq problem
“因为是OJ上的题,就简单点好了。” Orz看看贴吧吧:http://tieba.baidu.com/p/2947256742#47989538012l记一下next 从左到右 删了之前的标记 再从这个点到next-1都打标记 然后就可以查询了按一个坐标离线做强制转在线么 用主席树好了 第一次打主席树区间修改 空间两个log 不过这个的前提是标记永久化 不然就是n2了原创 2016-05-13 16:17:40 · 1196 阅读 · 0 评论 -
[主席树] BZOJ 3932 [CQOI2015]任务查询系统
裸题#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1原创 2016-05-13 16:26:52 · 377 阅读 · 0 评论 -
[主席树] BZOJ 2588 Spoj 10628. Count on a tree
树上路径第k大 裸题#include#include#include#define V G[p].vusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(bu原创 2016-05-13 16:22:14 · 460 阅读 · 0 评论 -
[主席树] BZOJ 1803 Spoj1487 Query on a tree III
裸题 dfs序好了#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)+fread(buf,1,100000,std原创 2016-05-13 16:20:17 · 517 阅读 · 0 评论 -
[主席树优化建图 最小割] BZOJ 3218 a + b Problem
膜拜PoPoQQQ的题解:http://blog.csdn.net/PoPoQQQ/article/details/42557217#include#include#include#include#define cl(x) memset(x,0,sizeof(x))#define V G[p].vusing namespace std;typedef long long原创 2016-05-29 21:32:22 · 469 阅读 · 0 评论 -
[主席树 启发式合并] BZOJ 3123 [Sdoi2013]森林
本来一看LCT 后来看第k大 主席树啦#include#include#include#include#define V G[p].v#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if原创 2016-05-13 16:31:53 · 602 阅读 · 0 评论 -
[主席树] BZOJ 3673 可持久化并查集 by zky BZOJ 3674 可持久化并查集加强版
什么时候去用rope水一下贴3674的代码吧 3673没看到没在线了 炸死了#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=b原创 2016-05-13 16:34:16 · 540 阅读 · 0 评论 -
[主席树 二分答案] BZOJ 2653 middle
题解:http://blog.csdn.net/acm_cxlove/article/details/8566093要求中位数最大,首先二分中位数,然后判断可行不可行。判断X可行不可行,对于区间内的数,凡是>=X的标为1,否则为-1。这样的话,求一次最大区间和如果大于等于0,则说明可行。#include#include#includeu原创 2016-05-13 21:53:27 · 410 阅读 · 0 评论 -
[主席树 树状数组套权值线段树] BZOJ 1146 [CTSC2008]网络管理Network
CTSC的裸题么先建主席树 然后修改么 可以发现对整棵子树有影响 对每个点记录每个权值的改变量然后用差分的思想 用树状数组区间修改 单点查询A掉后发现不用打主席树 可以最初的权值也可以树状数组上改 结果稍微改下程序 慢了5倍233#include#include#include#define V G[p].vusing namespace std;原创 2016-05-13 21:50:46 · 902 阅读 · 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 · 496 阅读 · 0 评论