![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
————数据结构————
文章平均质量分 55
Michael_GLF
AFOing
展开
-
【TJOI2018】 异或(可持久化01Trie+树链剖分)
传送门【题目分析】可持久化Trie与主席树其实没啥太大的实现上的差别,因为一次只会插入一个串,也就只会在前一个版本的Trie上改变一条链,那么其他儿子就可以与主席树类似的操作直接继承。那么如何判断两个版本之间是否有一个串呢?我们对每个节点记一个size,只要后一个版本该节点的size>前一个版本该节点的size,那么就一定至少有一个串经过了当前节点。有了这个东西我们就可以直接...原创 2019-11-14 08:21:31 · 296 阅读 · 0 评论 -
洛谷1525 关押罪犯(二分图染色+二分答案/并查集)
冒险寮【题目描述】S 城现有两座监狱,一共关押着N 名罪犯,编号分别为 1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 c 的冲突事件。每年年末,警...原创 2018-10-15 22:04:41 · 134 阅读 · 0 评论 -
POJ1741 Tree(点分治)
咻~【题目分析】分治好差的QAQ。。。。。。。。写个dfs都写挂了的QAQ。。。。。。。。很经典的点分治QAQ。。。。。。首先我们肯定不可能两两求长度比较,因为点数已经有1w了呢QAQ。。。。。。。如果是链的话非常不平衡啊QAQ(但不要想到奇怪的方向,可是Treap也可以做呢QAQ)。。。。。。。所以我们找一棵树的中心来分治QAQ。。。。。。。然后看看下图的QAQ。...原创 2018-10-17 21:39:01 · 118 阅读 · 0 评论 -
洛谷3203 弹飞绵羊(LCT)
Splay不rotate简直该打【题目分析】首先%一下黄学长。。。。。woc分块原来也能做。。。。大家可以拜读一下:传送门好的现在说说我的做法,也就是网上一般的做法:LCT。题意还是很简单,维护LCT,支持Link和Cut操作。然后就没有然后了。。。。。。。【代码~】#include<bits/stdc++.h>using namespace std;...原创 2018-10-18 09:41:45 · 123 阅读 · 0 评论 -
洛谷3870 开关(线段树)
Build后忘push_up简直有毒【题目分析】题意还是很明显的,支持区间取反,区间查询。所以我们线段树的sum数组开成二维的,第一维记录关的灯的数量,第二维记录开着的灯的数量。push_down的lazy标记就swap一下0和1的个数。查询时返回区间1的sum即可。【代码~】#include<bits/stdc++.h>using namespace ...原创 2018-10-18 15:14:04 · 197 阅读 · 0 评论 -
洛谷4513 小白逛公园(线段树)
嗒嗒嗒嗒嗒嗒【题目分析】题意。。。很明显看出要维护区间子序列最大值,那么问题就在于如何在区间合并的时候更新区间子序列最大值。可以推出,区间子序列最大值要么是从最左边开始的一段,要么是最右边向左的一段,要么是中间的一段,对于第一种,我们发现要么是左儿子最左边的一段,要么是左儿子+右儿子左边一段,第二种同理。对于第三种,要么是左儿子的最大值,要么是右儿子的最大值,要么是左儿子的右边的一...原创 2018-10-19 19:16:48 · 227 阅读 · 0 评论 -
洛谷4145 上帝造题的七分钟2 / 花神游历各国(线段树)
传送门【题目分析】题目大概就是让你维护一个数据结构,支持区间开方和区间求和————线段树!区间求和是基本操作,所以考虑如何支持区间开方。考虑一个区间a[l]~a[r],令其中最大值为a[i],最小值为a[j],所以区间极差就为a[i]-a[j],如果我们对其进行开方操作,那么极差就变为了,很明显能发现,极差变小了,所以我们得出结论:对于每一次开方操作,区间内的数都逐渐趋向相近,那么...原创 2018-10-22 12:17:47 · 255 阅读 · 0 评论 -
SP11470 TTM To the moon(线段树动态开点+时光倒流)
洛谷传送门【题目分析】洛谷第一道黑题唉。题目也说的很清楚,维护一个数据结构,支持区间加,区间求和,区间历史求和,时光倒流。很明显如果将标记下传,那么还会多个撤销操作,这不优秀,所以我们就考虑标记永久化。然后其他就是主席树的基本操作了。。。。(240ms氵谷rank6)【代码~】#include<bits/stdc++.h>using namespace ...原创 2018-10-22 20:43:26 · 244 阅读 · 0 评论 -
线段树的各种高级姿势
写在前面感谢ldx大佬的讲解!先%为敬!这篇博客主要记录的是一些线段树的例题,记住线段树的核心:标记的下放和信息的合并。高级操作走一波(打星号的贼难啊)(好吧这是基本操作)线段树支持区间加、区间乘、区间求和线段树维护区间开方和区间求和(*)线段树维护区间加、区间求和、区间历史求和、时光倒流线段树与树链剖分结合维护路径信息线段树维护最大子段和线段树维护最长连续1...原创 2018-10-22 21:12:43 · 666 阅读 · 0 评论 -
NOIP模拟 战争(反向建图+并查集)
QAQ【题目分析】好菜好菜。。。。。fAKe dalao ldx差点就AK了啊。。。。。。。再看看自己的分。。。。。【捂脸】之前还做过同类型的题啊,蓝瘦。正难则反,既然删点难以维护,就考虑向图中加点,直接离线处理。首先读入所有操作,统计最后剩下的所有点产生的贡献,合并两个联通块产生的贡献就是两个联通块的权值和的积,所以维护一下就好了,至于每次摧毁的点要记得连通后要变成未摧毁的,...原创 2018-10-23 19:27:05 · 209 阅读 · 0 评论 -
NOIP模拟 行星通道计划(二维树状数组)
QAQ【题目分析】考虑树状数组维护状态,然后。。。。。就没有然后了。。。。。没想出来二维如何统计。感觉正解很毒瘤啊,各种压位操作。。。。所以正常打个二维树状数组还是能过啊。。。。考虑两个连接点x,y,如果以后有两个点x',y'经过他,那么一定满足x<x'<y<y'或x'<x<y'<y,所以相当于1~x-1,x+1~y-1的点相连的代价增加1,x+...原创 2018-10-23 19:31:56 · 106 阅读 · 0 评论 -
洛谷1505 旅游(树链剖分)
QAQ【题目分析】一道裸的剖分被一个极度sb的错误卡了两天。。。。。。题意很明显,维护5个操作:单点修改,区间取相反数,区间求和,区间求最大值,区间求最小值。因为求一条路径,考虑树链剖分维护(注意dfs序时优先dfs重儿子!!!这样在线段树上的编号才连续!!!)考虑第一个操作,对于一条路径,如果修改了他的权值,那么只会对深度较浅的一个点向下走、深度较深的向上走会产生影响,所以单...原创 2018-10-23 21:01:27 · 193 阅读 · 0 评论 -
洛谷4588 数学计算(线段树)
QAQ【题目分析】思路妙妙妙啊。现在我们有q个叶子节点,权值为1的线段树,对于每次1操作,相当于将第i个叶子节点的值改为val,每次2操作就是将之前某叶节点权值改为1,最后输出根节点的权值即可。其实还算比较氵的题了。。。。【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL...原创 2018-10-23 21:29:45 · 228 阅读 · 0 评论 -
洛谷1600 天天爱跑步(树链剖分)
啊哈~【题目分析】哇这真的是DAY1T2吗。。。。。感觉要被强行劝退了。。。。。qwq首先对于树上的路径s->t,我们都可以将其拆为s->lca(s,t)->t,我们用dona数组作为记录贡献的桶。考虑一个点i能被观察到的情况,分为两种:1.存在一条路径s->lca(s,t),且depth[i]+val[i](即原题的w)=depth[s]2.存在一...原创 2018-10-24 22:02:19 · 178 阅读 · 0 评论 -
洛谷1196 银河英雄传说(并查集)
传送门【题目分析】题目整个就一赤裸裸的并查集啊。。。。就多了一个记录深度。。。。每次M操作就是merge x->y,每个并查集,记录父亲、大小、深度三个值,每次find父亲的时候记录深度即可。对于每次询问,就是两个点的深度相减取绝对值再减去1即可(这个手推一下不就出来了吗(雾))PS:我再也不相信读优了!当我以为这样写是可以的,结果事实狠狠的打了我的脸,所以该用字符串读入...原创 2018-10-25 10:03:48 · 179 阅读 · 0 评论 -
洛谷3373 线段树2(线段树)
传送门【题目分析】RT,就是线段树的模板,支持区间乘、区间加、区间求和。很有意思的一点是两个标记的下传,解决了就行了。然后这道题,作为AHOI,竟然是个裸的模板!(可能年份久远的原因吧。。。)两个一毛一样嘛!【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL;const...原创 2018-10-25 10:53:21 · 195 阅读 · 0 评论 -
洛谷1198 最大数(线段树)
洛谷传送门【题目分析】跟数学计算一题差不多。就是开一个q那么大的线段树,初始叶子节点全部为0,操作都很常规。。。。比较氵的题。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e6+10;;const int INF=0x3f3f3f3f;int q,cnt;int maxx...原创 2018-10-26 22:10:30 · 180 阅读 · 0 评论 -
NOIP模拟 数据结构(线段树)
【题目描述】在看了 jiry_2 的课件《Segment Tree Beats!》后,小 O 深深沉迷于这种能单次 O(logn) 支持区间与一个数取 min/max,查询区间和等信息的数据结构,于是他决定做一道与区间与 一个数取 min/max 的好题。这题是这样的:你得到了一个长度为 n 的数列{ai},要求支持以下 2 种操作:第一种是给 定 L,R,X,要求把区间中比 X 小的数字...原创 2018-10-12 20:31:27 · 187 阅读 · 2 评论 -
主席树【权值线段树】(转)
注:本文转自WCR神仙(应WCR本人要求)的博客,传送门:https://blog.csdn.net/g21wcr/article/details/82970228一、权值线段树。权值线段树,顾名思义,是建立在权值上的线段树。与普通的线段树不同【平时的线段树建立在定义域上,或者说位置下标上,比如说:一个1到n的序列,建立线段树后,根节点就存的是a[1]到a[n]的信息,根节点的左儿子就存的...转载 2018-10-09 19:01:45 · 1249 阅读 · 6 评论 -
【SHOI2015】 脑洞治疗仪(线段树)
氵谷传送门网上看到ODT吊打线段树的dalao。。。STO但我不会ODT所以只能写线段树QAQ三个操作分别对应:区间赋值为0,区间求1个数赋值为0再在指定区间从左往右填0,查询区间最长0。第一个和第三个操作比较常规,难点在第二个。一开始想的是直接统计1个数赋值,但可能被这种hack:将第五个挖出放在前四个中,最后就应该是1 1 0 1 0,但错误做法会变成 1 1 1 1 ...原创 2019-08-09 10:36:42 · 170 阅读 · 0 评论 -
校内OJ3755 数据结构题(线段树)
【题目描述】给出一个长为n的序列编号 输入格式 含义 1 1 l r 求区间[l,r]的和 2 2 l r 求区间[l,r]的最大值 3 3 l r 求区间[l,r]的最小值 4 4 l r x 将区间[l,r]内的所有数加上 x 5 5 i x 将第i个数按位异或 x 6 6 l ...原创 2019-07-19 10:20:54 · 131 阅读 · 0 评论 -
洛谷2495 【SDOI2011】消耗战(虚树)
传送门【题目分析】很好的虚树入门题。很明显不可能询问一次就对整棵树进行一次遍历,这样会直接T掉,发现其实很多点是不用保留的,这也是虚树的好处:简化整个图然后进行操作。所以我们将所有关键点及其LCA储存进最后的图中,构建虚树。然后就是常规DP,每个点记一个到根的边最小值,遍历到叶子节点时直接返回最小值,否则记录所有儿子最小值之和,与直接割当前点进行比较取较小值即可。(为啥我非...原创 2019-03-02 16:55:59 · 218 阅读 · 0 评论 -
HDU1166 敌兵布阵(树状数组或线段树)
【问题描述】 C 国的死对头 A 国这段时间正在进行军事演习,所以 C 国间谍头子 Derek 和他手下 Tidy 又开始忙乎了。A 国在海岸线沿直线布置了 N 个工兵营地,Derek 和 Tidy 的任务就是要监 视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数 C 国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手, 但这些都...原创 2018-06-27 22:26:18 · 146 阅读 · 0 评论 -
HDU1890 Robotic Sort(伸展树换根+删除操作)
【题目描述】Somewhere deep in the Czech Technical University buildings, there are laboratories for examining mechanical and electrical properties of various materials. In one of yesterday’s presentations,...原创 2018-10-03 13:51:52 · 555 阅读 · 3 评论 -
关于Splay的学习感受
【关于Splay】之前记得五月份听过一次外省金牌选手讲过一次,然后七月份又讲过一次,但本人脑子比较笨,当时完全听得一脸懵逼啊,练了两个月确实不一样,现在谈一下学习Splay的一些感受。首先欲知Splay为何物,不得不先讲讲它的祖宗:二叉查找树,即BST(Binary Search Tree),关于二叉查找树,...原创 2018-10-03 15:34:42 · 254 阅读 · 1 评论 -
NOIP模拟 相遇(LCA+树状数组+dfs序)
【题目描述】豪哥生活在一个n个点的树形城市里面,每一天都要走来走去。虽然走的是比较的多,但是豪哥在这个城市里面的朋友并不是很多。当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交往。豪哥现在spy了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与其相遇。但是豪哥是想找话题的,他...原创 2018-10-05 15:57:21 · 259 阅读 · 0 评论 -
关于Treap的学习感受
好了我就很愉快的回来补坑了~Treap也是一种平衡树,它较普通二叉查找树而言,每个节点被赋予了一个新的属性:优先级(没错就是类似优先队列的优先),对于Treap中的每个结点,除了它的权值满足二叉查找树的性质外,它的优先级还满足堆性质,也就是结点的优先...原创 2018-10-05 17:09:58 · 169 阅读 · 0 评论 -
关于树上信息的维护
1.Dfs序的一些奇奇怪怪的操作和改进所谓dfs序,就是一棵树被 dfs 时所经过的节点的顺序。一般的作用是维护子树信息,如果记录 dfn[i] 表示 i 号点的 dfs 序,sze[i]表示 i 号点的子树大小,那么 x 是 y 的祖先等价于:dfn[y] ∈ [dfn[x], dfn[x]+sze[x]−1]那么我们就可以利用dfs序来进行一些树上的操作:1.维护一棵树,支持:子树...原创 2018-10-06 12:10:31 · 603 阅读 · 0 评论 -
BZOJ1036 树的统计(树链剖分+线段树)
【题目描述】一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作:I. CHANGE u t : 把结点u的权值改为tII. QMAX u v: 询问从点u到点v的路径上的节点的最大权值III. QSUM u v: 询问从点u到点v的路径上的节点的权值和注意:从点u到点v的路径上的节点包括u和v本身【输入格式】输入...原创 2018-10-07 12:00:53 · 238 阅读 · 0 评论 -
WOJ2230 树上修改1(倍增/树剖(树剖写法见下篇))
【题目描述】有n个节点N-1条边,这是一颗树,有2个操作:1 x y v:表示将节点x到y最短路径上所有的点的权值+v2 x:表示查询节点x的权值开始的时候每个节点的权值是0【输入格式】第一行是数N,表示N个节点 接下来n-1行,每行描述了n-1条边。接下来是一个数q表示有q次查询与询问 接下来q行,格式如题【输出格式】对于每次询问,输出询问节点的权值【样例...原创 2018-10-07 15:45:03 · 177 阅读 · 0 评论 -
WOJ2231 树上修改3(没有2是什么鬼,方法同上一篇)
树上修改1传送门:https://blog.csdn.net/g21glf/article/details/82958565【题目描述】有n个节点N-1条边,这是一颗树,有2个操作:1 x y v:表示将节点x到y最短路径上所有的点的权值+v2 x:表示查询子树x的权值和开始的时候每个节点的权值是0【输入格式】第一行是数N,表示N个节点 接下来n-1行,每行描述了n-1...原创 2018-10-07 16:17:28 · 172 阅读 · 0 评论 -
WOJ2232 树上修改4(方法同上上篇,树剖)
【题目描述】有n个节点N-1条边,这是一颗树,有2个操作:1 x v:表示将节点x的权值+v2 x y:表示查询x到y的路径权值和【输入格式】第一行是数N,表示N个节点,接下一行是n个数,表示每个节点的初始权值。接下来n-1行,每行描述了n-1条边。接下来是一个数q表示有q次查询与询问 接下来q行,格式如题【输出格式】对于每次询问,输出路径权值和。【样例输入...原创 2018-10-07 16:45:17 · 124 阅读 · 0 评论 -
关于动态树和LCT的一些学习感受
什么是动态树?动态树(Dynamic Tree)问题是指在树上动态维护相关信息的问题。一般的动态树问题中,会要求我们维护一个由若干棵子结点无序的有根树组成的森林。并且要求这个数据结构支持对树的分割(删边),合并(加边),对某个点到它的根的路径的某些操作(路径操作)。有时,动态树问题还会涉及对某个点的子树进行的某些操作(子树操作),而涉及子树操作问题的动态树问题更加复杂,需要用到更加复杂的数...原创 2018-10-07 19:27:32 · 213 阅读 · 0 评论 -
BZOJ2049 洞穴勘测(LCT)
【题目描述】(太长也懒得复制了)题目大意就是:给你N个点,这N个点一开始没有路径相连,然后给出M个操作,包含三个操作:1.Query(x,y):询问x,y之间是否连通。2.Connect(x,y):在x,y之间连一条边。3.Destroy(x,y):将x,y之间的边删除。最后对于每个Query,如果连通就输出"Yes",否则输出“No”。【输入格式】第一行为两个正整...原创 2018-10-07 20:32:20 · 170 阅读 · 0 评论 -
关于树状数组的区间修改和单点查询
写在前面之前一直不知道树状数组可以支持区间修改,所以写一篇博客记录一下。首先给个小栗子:如下图:利用差分的思路,就得到下图:那么如果我们要求将2~4的所有元素+2呢?我们就可以得到下图:可以发现,差分的第二项和第五项一个加了2,一个减了2,所以对于每次区间[l,r]操作,我们只需要在l和r+1的位置加、减操作值即可,证明也很简单,首先操作区间内的数的差肯定不会变...原创 2018-10-08 16:34:14 · 301 阅读 · 0 评论 -
洛谷1972 HH的项链(树状数组)
传送门【题目分析】刚看完这道题YY了一下线段树的做法,大概就是维护颜色出现次数,如果区间合并时一个颜色的个数从0变为1,那么就出现了一次,cnt++(不过感觉很难写所以就没写)很明显可以离线来做,因为不涉及修改操作,所以将所有询问按左右id进行排序,对于同一颜色,用链表储存位置,从左向右走的时候向树状数组中更新,然后在树状数组中查询即可。(结果数组开小了调了半天233)【代码~】...原创 2018-10-27 21:30:26 · 211 阅读 · 0 评论 -
洛谷3834 可持久化线段树(主席树模板)
传送门【题目分析】主席树经典问题,静态查询区间第k大数。拖了很久都没有写的模板。。。。结果差不多此次%你赛都考,痛定思痛后,决定好好研究下。主席树可以近似理解为权值线段树的前缀和的形式,详细讲解可参考wcr写的主席树讲解:传送门。回到该题,因为不涉及修改操作,所以我们建立n棵权值线段树,先将数据离散化,这样主席树的权值就在1~len中了,每次插入操作就相当于将a[i]到根的路径...原创 2018-10-29 09:23:25 · 150 阅读 · 0 评论 -
洛谷3976 【TJOI2015】旅游(树链剖分)
传送门【题目分析】考试3h30min,40min打完T2,就对着这道和T3发懵。。。。。。讲道理昨天我看见这道题就丢了。。。。。首先题意简直令人想打出题人,语文水平果然很重要。。。。其实只能在这条路径上买一次宝石、卖一次宝石,所以就是求最大差值。但这道题要考虑路径是有向的,所以将路径拆为u->lca和lca->v,query的时候直接传结构体就行了。。。然后...原创 2019-01-20 16:13:14 · 155 阅读 · 1 评论 -
洛谷1486 【NOI2004】郁闷的出纳员(Splay)
传送门【题目分析】说是Splay的板题。。。orz谁来拯救常数巨大的我qwq其实就是平衡树维护查询区间k大,统计比lim小的数个数,至于全体的加减可以直接用一个标记来搞定。反正按题意弄就行了qwq【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e5+10;int n,lim...原创 2019-01-21 09:52:51 · 121 阅读 · 0 评论 -
BZOJ2238 mst(最小生成树+树链剖分)
传送门【题目分析】树剖好题。首先按题意做出最小生成树,如果做不出,那么所有询问都是"Not connected"。同样,如果删的是非生成树上的边,对答案不会造成影响,直接输出最小生成树的权值即可。那么考虑生成树上的边被删的情况:很明显,对于一个环上的所有边,如果删掉一条,剩下的点仍然会保持联通。所以这个环上的所有边都是可以互相替代的。按照这个思路,我们将所有非生成树...原创 2019-01-21 10:55:05 · 446 阅读 · 0 评论