
数据结构
文章平均质量分 65
Frozen_Guardian
已退役菜鸡Acmer
展开
-
Link-Cut Tree动态树模板
struct Link_Cut_Tree{ int fa[N],ch[N][2],sum[N],rev[N],Stack[N],top; bool son(int x)//判断点x是父节点的左儿子还是右儿子 { return x==ch[fa[x]][1]; } bool isroot(int x)//判断一个点是不是根节点(当前splay的根节点) { return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x; } void pushup.原创 2020-10-30 19:24:15 · 208 阅读 · 0 评论 -
虚树模板
讲解博客:https://blog.youkuaiyun.com/weixin_37517391/article/details/82744605用法:可以将树中的关键节点单独拎出来构造出一棵小于等于 max( n , 2 * k )个节点的虚树,其中 n 为原树节点个数,k 为关键节点个数代码:const int N=1e5+100;bool cmp(int x,int y);stru...原创 2020-04-25 15:40:58 · 299 阅读 · 0 评论 -
(转)Splay伸展树模板
大佬博客:https://www.luogu.com.cn/blog/user19027/solution-p3369代码:class Splay//存储规则:小左大右,重复节点记录 { #define root e[0].ch[1] //该树的根节点 private: class node { public:...转载 2020-03-03 13:21:59 · 264 阅读 · 0 评论 -
洛谷 - P3899 [湖南集训]谈笑风生(dfs序+主席树/二维数点)
题目链接:点击查看题目大意:设 TTT 为一棵有根树,我们做如下的定义:设 aaa 和 bbb 为 TTT 中的两个不同节点。如果 aaa 是 bbb 的祖先,那么称“aaa 比 bbb 更为厉害”。设 aaa 和 bbb 为 TTT 中的两个不同节点。如果 aaa 与 bbb 在树上的距离不超过某个给定常数 xxx,那么称“ aaa 与 bbb 彼此彼此”。给定一棵 nnn 个节点的有根树 TTT,节点的编号为 111 到 nnn,根节点为 111 号节点。你需要回答 qqq 个询问,询问给原创 2021-08-23 21:26:40 · 490 阅读 · 4 评论 -
洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
题目链接:点击查看题目大意:给出一个二维平面坐标系,需要执行数次操作,具体操作分为下列两种:1 x y a:坐标 (x,y)(x,y)(x,y) 加上 aaa 个点2 x1 y1 x2 y2:查询以 (x1,y1)(x_1,y_1)(x1,y1) 为左下角、(x2,y2)(x_2,y_2)(x2,y2) 为右上角的矩阵中有多少个点题目分析:三种做法,但是树套树内存不太够,所以拿不了满分。剩下的四叉树跑的巨慢,cdq分治表现还算不错。因为写 cdqcdqcdq 的时候询问和加点并不会冲突原创 2021-08-23 18:41:58 · 491 阅读 · 0 评论 -
洛谷 - P2163 [SHOI2007]园丁的烦恼(不带修二维数点-树状数组/主席树)
题目链接:点击查看题目大意:二维平面坐标系中给出 nnn 个坐标点,然后是 mmm 次询问,每次询问需要回答一个闭合矩阵中有多少个点题目分析:想挂树套树来着,但是复杂度有点大。本题不带修且可以离线,考虑将一个询问拆成四个二维前缀和的表示形式,然后就可以排个序直接用树状数组统计啦有个小细节就是当 xxx 坐标相同时,需要先加点然后再询问代码:// Problem: P2163 [SHOI2007]园丁的烦恼// Contest: Luogu// URL: https://www.luogu.co原创 2021-08-23 14:17:35 · 445 阅读 · 2 评论 -
Gym - 101173H Hangar Hurdles(bfs+克鲁斯卡尔重构树)
题目链接:点击查看题目大意:给出一个 n∗nn*nn∗n 的矩阵,有些位置存在障碍物,现在有 qqq 次询问,每次询问给出两个点 st=(x1,y1),ed=(x2,y2)st=(x1,y1),ed=(x2,y2)st=(x1,y1),ed=(x2,y2),需要回答从 ststst 开始推箱子,可以推到 ededed 的最大箱子的边长是多少题目分析:首先不难想到预处理出以每个点为中心时,可以放置箱子的最大边长,可以通过二维前缀和+二分的思路在 O(n2logn)O(n^2logn)O(n2logn) 的原创 2021-08-23 11:21:15 · 350 阅读 · 0 评论 -
牛客 - 焦糖布丁(线性基+博弈)
题目链接:点击查看题目大意:给出 nnn 个数字,现在要求将其构造成一棵有根树,使得博弈的后手必胜博弈规则如下:两人轮流操作,每次选择一个点,然后将当前点的部分(可以是全部)点权交付给其父节点更具体的来说,每次选择一个点 xxx,再选择一个 yyy 满足 ax>=y>0a_x>=y>0ax>=y>0,执行操作 ax−=y,afa+=ya_x-=y,a_{fa}+=yax−=y,afa+=y无法执行操作的人失败,问是否可以构造题目分析:考虑逐步分析假设根节原创 2021-06-03 09:16:25 · 209 阅读 · 1 评论 -
HDU - 6183 Color it(动态开点线段树/树状数组套动态开点线段树)
题目链接:点击查看题目大意:给出一个二维平面坐标系,需要完成四种操作:0:删除所有点1原创 2021-05-06 11:34:20 · 256 阅读 · 9 评论 -
c++中std::set自定义去重和排序函数
c++中的std::set,是基于红黑树的平衡二叉树的数据结构实现的一种容器,因为其中所包含的元素的值是唯一的,因此主要用于去重和排序。这篇文章的目的在于探讨和分享如何正确使用std::set实现去重和排序功能。方法一:使用std::set内置的less比较函数(直接定义内置类型的set对象)这种方法适用于:1)比较int、char等内置类型。2)只能针对某一个内置类型去重和排序:如果想通过id(int)去重,并通过hot(int)排序,该种方法就束手无策了。代码如下:#include <ios转载 2021-04-07 16:22:48 · 6896 阅读 · 5 评论 -
CodeForces - 897E Willem, Chtholly and Seniorious(珂朵莉树)
题目链接:点击查看题目大意:给出一个长度为 nnn 的数列,现在需要执行 mmm 次操作,每次操作分为下列四种情况:1 l r x1 \ l \ r \ x1 l r x:[l,r][l,r][l,r] 内的位置都加上 xxx2 l r x2 \ l \ r \ x2 l r x:[l,r][l,r][l,r] 内的数都变为 xxx3 l r x3原创 2020-12-26 12:51:28 · 304 阅读 · 0 评论 -
2020ICPC(南京) - Just Another Game of Stones(吉司机线段树+博弈)
题目链接:点击查看题目大意:给出一个长度为 nnn 的数列 aaa,现在需要执行 mmm 次操作,每次操作分为两种类型:1 l r x1 \ l \ r \ x1 l r x:对于所有 i∈[l,r]i \in [l,r]i∈[l,r] 执行 ai=max(ai,x)a_i=max(a_i,x)ai=max(ai,x)2 l r x2 \ l \ r \ x2 l r x:对于原创 2020-12-23 16:42:12 · 831 阅读 · 4 评论 -
2020CCPC(长春) - Ragdoll(启发式合并+带权并查集)
题目大意:初始时给出 n 个集合,每个集合中都包含有一个数字,现在要求执行 m 次操作,每次操作分为下列三种类型:1 x y:在 x 位置新建一个集合,并且放置一个数字 y 2 x y:合并集合 x 和集合 y 3 x y:将集合 x 中的数字修改为 y每次执行完操作后需要回答,对于每个集合而言,的匹配数之和题目分析:首先考虑何时 x 和 y 才可以匹配,假设任取两个数字 x 和 y,再设 gcd( x , y ) = gcd = x ^ y,需要满足 x % gcd == 0 &..原创 2020-11-10 19:49:06 · 637 阅读 · 0 评论 -
洛谷 - P6292 区间本质不同子串个数(SAM+LCT+线段树)
题目链接:点击查看题目大意:给出一个长度为 n 的字符串,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 内有多少个本质不同的字符串题目分析:首先简化模型,回顾一下如何求解 “区间内有多少个不同的数” :SPOJ - DQUERY求解上面那道题目的方法可谓是五花八门,我们采用其中一种离线的方式:先将所有的询问储存下来,按照右端点 r 排序后,每次对于重复出现的数字,用线段树维护其最后一次出现的位置,那么答案就是 [ l , r ] 中元素的个数了对于这个题目而言,将每个本质不同原创 2020-10-30 22:30:26 · 1499 阅读 · 0 评论 -
洛谷 - P3690 【模板】Link Cut Tree (动态树)(LCT模板)
题目链接:点击查看题目大意:给出 n 个带权节点,需要执行 m 次操作,每次操作分为四种类型:0 x y代表询问从x到y的路径上的点的权值的xor和。保证x到y是联通的。 1 x y代表连接x到y,若x到y已经联通则无需连接。 2 x y代表删除边(x,y),不保证边(x,y) 存在。 3 x y代表将点x上的权值变成y。题目分析:直接调用相应的函数即可代码://#pragma GCC optimize(2)//#pragm...原创 2020-10-30 19:26:41 · 228 阅读 · 0 评论 -
牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)
题目链接:点击查看题目大意:给出一个由 n 个点和 m 条边组成的连通图,每个点都有一种颜色,每条边都有一个权值,现在规定一个起点 st,再给出 q 次询问,每次询问给出区间 [ l , r ] ,问权值为i ∈ [ l , r ] 时,从起点经过权值不超过 i 的连通块内,有多少种不同的颜色题目分析:因为需要回答的答案满足前缀和的性质,所以可以预处理出前缀和然后 O( 1 ) 回答,但是询问的范围特别大, 需要对前缀和进行离散化,这个应该算是一个小技巧,具体实现可以参考代码然后就是颜色的...原创 2020-10-28 20:08:38 · 320 阅读 · 2 评论 -
牛客 - 红蓝图(克鲁斯卡尔重构树的dfs序上建主席树)
题目链接:点击查看题目大意:给出一张 n 个点和 m 条边组成的无向图,每条边都有边权和颜色,颜色分为红色和蓝色,现在有 q 次相互独立的操作,每次操作会询问 ( x , t ) ,问删除掉所有权值大于 t 的红色边和所有权值小于 t 的蓝色边后,x 所在的连通块的大小是多少注意,两个点联通,既需要存在着红色的可达路径,也需要存在着蓝色的可达路径题目分析:如果去掉蓝色边的限制,只考虑 “删除掉权值大于 t 的边后,点 x 所在的连通块的大小是多少” ,这就是个标准的克鲁斯卡尔重构树的dfs序问题原创 2020-10-16 11:38:48 · 384 阅读 · 0 评论 -
CodeForces - 571D Campus(数据结构综合)
题目链接:点击查看题目大意:题目分析:数据结构的题目写起来真好玩~(debug到吐)考虑离线,题目实质上就是维护两个森林,然后对同一个序列进行的赋值操作,如果是对单一的森林进行加边删边然后连通块内求值修改之类的话,不难想到克鲁斯卡尔重构树,但两个森林的话该怎么办呢注意到第一个森林中对连通块的操作是加法,第二个森林中对连通块的操作是置零任取一个点 x 进行讨论,假设现在不考虑第二个森林的贡献,也就是忽略掉第二种操作和第四种操作,并且在每次操作后都记录一下点 x 的值,更具体的,设 va原创 2020-10-14 18:18:31 · 264 阅读 · 0 评论 -
CodeForces - 1417F Graph and Queries(克鲁斯卡尔重构树的dfs序上建线段树)
题目链接:点击查看题目大意:给出一个 n 个点 m 条边组成的无向图,每个点初始时都有一个权值 val,满足:每个点的 val[ i ] 各不相同 val[ i ] ∈ [ 1 , n ]现在有 m 次操作,每次操作分为以下两种类型:1 x:询问点 x 所在的连通块内 val 的最大值,设 val[ y ] 最大,输出 val[ y ],且进行赋值操作:val[ y ] = 0 2 x:将第 x 条边删除题目分析:难点比较多,且也很具有误导性,第一个难点就是如何处理连通块内的最大值问题,原创 2020-10-14 10:19:08 · 1082 阅读 · 0 评论 -
中石油训练赛 - Insertion Order(二叉搜索树+构造)
题目大意:构造出一个长度为 n 的排列,使得按照这个顺序构造出的二叉搜索树的高度为 k题目分析:知道 n 的大小后不难算出其可以构造的二叉搜索树高度的可行范围,下限是一棵满二叉树,这个利用倍增很快就能找到,上限就是 n ,当且仅当这棵树退化为一条链时达到,如果在这个范围内是一定有解且可以构造的考虑如何构造答案,首先我们先构造一棵有 n 个节点,高度为 k 的树,只需要先用 dfs 固定出一条长度为 k 的链保证其高度至少为 k ,然后再用 bfs 逐层加点即可,当构造出整棵树后,递归对其赋值即可..原创 2020-09-28 12:26:14 · 673 阅读 · 0 评论 -
牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)
题目链接:点击查看题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在给定 m 个点分别是 1! , 2! , 3! ... ,每个点都有个权值 w[ i ] ,现在需要找出一个点 u ,使得最小,输出这个最小值题目分析:先说收获,通过这个题让我稍微明白了一点换根dp。。话说为什么不直接去刷换根dp的题目,感觉有点多此亿举再说简单的部分,如果 m 个节点的树已经求出来了原创 2020-08-27 20:19:06 · 679 阅读 · 0 评论 -
洛谷 - P4755 Beautiful Pair(笛卡尔树+主席树)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a,现在一个数对 ( i , j ) 如果满足 a[ i ] * a[ j] <=max( a[ i ] ~ a[ j ]),则称其为美丽的,求出美丽对的数量题目分析:直接统计是比较困难的,但正难则反,我们可以枚举每个数作为最大值时,在其管辖的区间内进行统计,对于某个最大值 i 来说,肯定存在着 l[ i ] 和 r[ i ] ,使得 l[ i ] - 1 是 a[ i ] 左侧首个大于 a[ i ] 的位置,r[ i ] + 1 是..原创 2020-08-24 11:12:45 · 319 阅读 · 0 评论 -
洛谷 - P4768 [NOI2018]归程(Kruskal重构树+树上倍增+最短路)
题目链接:点击查看题目大意:去原网址看吧题目分析:因为是在刷克鲁斯卡尔重构树的题目,所以稍微思考一下就能想出解法了,首先如果水位线固定了,剩下的边组成的最小生成树也是一定的,此时同一个连通块内的点对答案的贡献都是相同的,因为车子可以随便开,这样连通块的贡献,就是连通块内距离点 1 最近的点了这样如何找相应的连通块呢?可以对所有边降序排序,建立克鲁斯卡尔重构树,对于点 x 来说,找到权值大于水位线,且深度最小的祖先,这一步可以用树上倍增来完成,此时这个祖先的子树中的点两两都可以互相达到了,显然包括原创 2020-08-23 21:17:12 · 265 阅读 · 0 评论 -
洛谷 - P4197 Peaks(Kruskal重构树+dfs序+主席树)
题目链接:点击查看题目大意:有n座山峰,每座山峰有他的高度 h[ i ] ,有些山峰之间有双向道路相连,共m条路径,每条路径有一个困难值,这个值越大表示越难走。现在有q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出−1。题目分析:因为有困难值的限制,所以可以对整个图跑克鲁斯卡尔重构树,如果对点 v 来说,只能走小于等于 x 的路径,可以树上倍增找到权值小于等于 x 的,深度最浅的祖先,显然这个祖先子树中的所有点都是可...原创 2020-08-23 19:35:55 · 406 阅读 · 0 评论 -
POJ - 1741 Tree(点分治模板题)
题目链接:点击查看题目大意:给出一棵 n 个节点的树,现在定义 dis( x , y ) 为点 x 和点 y 之间的路径长度,现在问 dis ( x , y ) <= k 的点对有多少题目分析:点分治的模板题目,干货博客:https://www.cnblogs.com/PinkRabbit/p/8593080.html自己写的时候写了一堆bug。。提示一下,如果是WA的话可能有点无从下手,但如果用的是链式前向星,还仍然 TLE 的话,大概率是重心的地方出现细节问题了,因为如果重心使用不当,原创 2020-08-23 14:59:38 · 264 阅读 · 0 评论 -
牛客多校3 - Sort the Strings Revision(笛卡尔树+分治)
题目链接:点击查看题目大意:给出一个长度为 n 的数字串 s[ 0 ],每个位置的赋值初始时为 s[ i ] = i % 10 ( i ∈ [ 0 , n - 1 ] ),现在有一个长度为 n 的排列 p,和一个长度为 n 的数列 d ,相当于 n 次操作,每次操作需要将第 p[ i ] 个位置的数字变为 d[ i ] ,这样一共能得到 n + 1 个数字串,需要给这 n + 1 个数字按照字典序排序题目分析:显然是不能构造出 n + 1 个串然后排序的,而且数据范围也限制了只能 O( n ) 实现原创 2020-08-23 10:11:50 · 303 阅读 · 0 评论 -
牛客 - sequence(笛卡尔树+线段树)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a 和数列 b ,求题目分析:不算难的题目,对于每个 a[ i ] 求一下贡献然后维护最大值就好,具体思路就是,先找出每个 a[ i ] 左右两侧分别小于 a[ i ] 的位置,分别记为 l 和 r,再对数列 b 维护一下前缀和 sum,比较显然的就是 ( l , r ) 这段区间内,凡是跨过位置 i 的区间最小值一定是 a[ i ],然后分类讨论一下:如果 a[ i ] > 0:在 [ l - 1 , i - 1 ] 中找到 sum原创 2020-08-22 17:07:17 · 299 阅读 · 0 评论 -
POJ - 2559 Largest Rectangle in a Histogram(笛卡尔树,单调栈实现)
题目链接:点击查看题目大意:给出一排高度不同,宽度都为 1 的矩形,问拼起来后最大的矩形面积是多少题目分析:普通做法是用单调栈直接维护,我一直觉得单调栈处理这种矩形问题都比较抽象,也可能是我太菜了,这个题目恰好发现可以用笛卡尔树实现,拿来练练手,根据笛卡尔树的性质,对于每个矩形,以出现的下标为 key ,高度为 val ,维护一个小顶堆的笛卡尔树,那么对于树上每个节点的 val 乘以子树的大小就是当前节点可以做出的贡献,维护一下最大值就是答案了为了防止特殊情况的出现,可以预处理在单调栈中加入一个原创 2020-08-22 11:58:05 · 255 阅读 · 0 评论 -
牛客 - 王国(虚树+树的直径)
题目链接:点击查看题目大意:给出 n 个点组成的一棵树,每个节点都有一个权值,现在规定权值相同的节点之间,简单路径的边数为 x ,求 x * x 的最大值题目分析:真的很巧,上周刚学的虚树,读完这个题的第一反应就是可以用虚树简化题目,其实完全可以用树形dp跑一遍dfs出来,可奈何我dp不好,就只能用虚树来做了题目中有两个点可以单独考虑,首先是权值相同的点,这个就可以用虚树将权值相同的点...原创 2020-05-02 20:30:11 · 400 阅读 · 0 评论 -
牛客 - 血压游戏(虚树+dp)
题目链接:点击查看题目大意:中文题,不难理解题目分析:这个题目比赛的时候没来得及看,比赛结束后看到有大佬写了一篇长链剖分+线段树的题解就被吓到了(主要是感觉太麻烦了,懒得去补了),读完题后总感觉似曾相识,但是去翻以前的博客并没有翻到,可能之前碰到过,不会做然后就劝退了吧,后来队友和我说是虚树模板题,昨天特意去学了一波虚树,回头看这个题,发现确实简单不难看出,松鼠的打架对于深度而言是相互...原创 2020-04-26 10:07:25 · 583 阅读 · 0 评论 -
CodeForces - 613D Kingdom and its Cities(虚树+贪心)
题目链接:点击查看题目大意:给出一棵 n 个结点组成的树,有多组询问,每组询问给出 k 个点,现在可以删除不同于 k 个节点的 m 个节点,使得这 k 个节点两两不连通,要求最小化 m ,如果不可能输出 -1 ,每组询问之间相互独立题目分析:如果只有一组样例的话树上贪心 O( n ) 就可以搞定,但是因为给了 T 组样例,所以时间复杂度就是 O( T * n ) 级别的了,显然需要优化...原创 2020-04-25 15:37:54 · 303 阅读 · 0 评论 -
HDU - 1890 Robotic Sort(Splay-区间翻转+删除根节点)
题目链接:点击查看题目大意:给出一个序列,初始时是乱序的,要求根据规则排序,规则是,遍历每一个点 i ,使得区间 [ i , a[ i ] ] 内的数翻转,a[ i ] 表示的是数列中第 i 大的数,可以看出每次翻转都会使得第 i 大的数字到达第 i 个位置上去,题目要求输出每次第 i 大的数的位置题目分析:一个题拖了好久。。说白了还是太懒了,一道比较经典的伸展树进阶题,做完之后还是收获了...原创 2020-03-13 23:21:22 · 329 阅读 · 0 评论 -
POJ - 2828 Buy Tickets(线段树+思维/Splay+模拟)
题目链接:点击查看题目大意:给出n个人,一个队列,一开始队列是空的,每个人加入的时候都会插入到指定位置pos的后面,即插队,问最后队列的排列情况是怎么样的题目分析:一开始很难想到是线段树的题目,毕竟这题目正儿八经的方法还能用树状数组,数据范围小点还可以贪心或暴力都可以解决,可是这个题的n是2e5,如果暴力n*n肯定就爆掉了,只能优化成logn才行。不多废话了,这个题目其实就是经典题目:...原创 2019-08-26 09:25:06 · 268 阅读 · 0 评论 -
洛谷 - P3391 【模板】文艺平衡树(Splay-区间反转)
题目链接:点击查看题目大意:给出一个初始时 a[ i ] = i 的序列,给出 m 次操作,每次操作将区间 [ l , r ] 内的数列反转,问最终的数列是什么题目分析:Splay处理区间反转问题的模板题,通过debug了一晚上这个题目让我稍微明白了一点东西,首先在Splay上找到一段区间的方法是先把点 l - 1 旋到根上,再把点 r + 1 旋到根的右节点上,那么根的右节点的左子树代表...原创 2020-03-11 19:55:36 · 343 阅读 · 0 评论 -
HDU - 1754 I Hate It(Splay-区间最大值)
题目链接:点击查看题目大意:初始时给出 n 个数字组成的数列,接下来有 m 次操作,分别对应着区间查询最大值以及单点修改,实现 m 次操作题目分析:线段树裸题,就不多说了,Splay的话,就在每个节点再维护一个 val 和一个 mmax 分别代表点权和子树的最大值,单点修改很简单,只需要找到对应的节点修改权值就好了,而区间查询也非常的巧妙,首先将 l - 1 这个节点旋到根节点处,这样根节...原创 2020-03-11 11:52:01 · 333 阅读 · 0 评论 -
POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
题目链接:点击查看题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型笛卡尔树的定义:所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树。使得:如果只关注key,那么这是一棵二叉搜索树 如果只关注val,那么这是一个堆 对于任意三个节点fa,ls,rs,满足: key[ls]<key[fa]<key[rs] val[fa]>=ma...原创 2019-11-25 14:05:00 · 462 阅读 · 1 评论 -
HYSBZ - 1208 宠物收养所(Splay)
题目链接:点击查看题目大意:中文题题目分析:一个星期前用单旋splay写的,一直TLE,一气之下用set乱搞写过去了,今天突然想起来这个题,意识到会不会是单旋的问题,改成双旋立马AC,而且比set还要快,果然是模板选择的问题对于人和宠物两个集合而言,我们只需要维护一个splay就足够了,因为同一时间内只会有一个集合的剩余,用来维护剩余的这个集合内的元素就好了,然后每次按照题意更新答案就...原创 2020-03-10 12:10:08 · 334 阅读 · 0 评论 -
HDU - 5306 Gorgeous Sequence(吉司机线段树)
题目链接:点击查看题目大意:给出 1 ~ n 的区间以及m 次操作,每次操作分为三种形式:0 l r val:对于区间 [ l , r ] ,a[ i ] = min ( a[ i ] , val ) 1 l r:输出区间 [ l , r ] 的最大值 2 l r:输出区间 [ l , r ] 的区间和题目分析:吉司机线段树的模板题,挺冷门的一个数据结构好像,但是鉴于比较简单就学了...原创 2020-03-07 15:20:19 · 506 阅读 · 0 评论 -
HYSBZ - 1503 郁闷的出纳员(Splay)
题目链接:点击查看题目大意:中文题题目分析:利用Splay加一点思维还是比较容易解决的,对于所有员工加工资以及减工资的操作,别看只有100次,如果是暴力修改的话,时间复杂度能达到1e7,常数稍大点的模板可能就顶不住了,这里可以思考一下,我们在伸展树中储存的可以是每个员工的相对工资,对于老员工加工资,相对于新员工来说就是减工资了,反之同理,所以我们可以维护一个diff变量,用来记录老员工工资...原创 2020-03-04 17:50:08 · 200 阅读 · 0 评论 -
HYSBZ - 1588 营业额统计(Splay)
题目链接:点击查看题目大意:给出 n 天的销售额,每天的销售额都需要与前面所有天中,找到与自己相差最小的销售额,并累加其差值的绝对值,输出累加后的答案题目分析:其实用set乱搞就可以了,为了练习数据结构的使用,还是用Splay写一下吧,具体是需要用到lower函数寻找小于等于自己的最大值,以及upper函数寻找大于等于自己的最小值,每次累加最小值就是答案了代码:#includ...原创 2020-03-04 12:43:10 · 262 阅读 · 0 评论