数据结构题
1·
stay fool
这个作者很懒,什么都没留下…
展开
-
G 牛客小白月赛87
【代码】G 牛客小白月赛87。原创 2024-03-09 14:57:57 · 364 阅读 · 0 评论 -
CF 921 div2 e
采用类似于分块的做法处理 2 查询 ,中间的利用线段树直接计算,两边少算的部分利用等差数列公式计算。但是注意在线段树上做查询的时候左区间要 +1 , 因为左区间上的val并不代表这个点的值,而是一段区间的值放在了这个港口上,这个点本上的值是0,要选的是从港口 + 1开始。本质上不是一个很困难的题目,只要是我调代码能力太拉了。通过map实现查询的大于和小于的点,迭代器要先--右边多算的是从[r + 1 , nex]左边少算的是从[l , nex]原创 2024-01-29 23:28:32 · 377 阅读 · 0 评论 -
主席树的板子
先思考全局查询的时候,就是看第k大是在左边的区间还是右边的区间‘现在改成[l , r] 上的查询的就通过维护1-i的线段树实现。大致就是利用前缀和的思想去寻找区间第k大。原创 2023-11-22 12:59:00 · 149 阅读 · 0 评论 -
分块区间加法 (
【代码】分块区间加法 (原创 2023-11-15 14:30:18 · 57 阅读 · 0 评论 -
分块1 (分块
【代码】分块1 (分块。原创 2023-11-15 14:21:03 · 40 阅读 · 0 评论 -
P1637 三元上升子序列 ( 树状数组
枚举中间的数,考虑左边有多少个数小于他,右边有多少个数大于它。树状数组维护桶,在有一点乘法原理把。原创 2023-10-24 18:20:10 · 38 阅读 · 0 评论 -
P4185 [USACO18JAN] MooTube G (并查集 + 离线
只有大于等于k的可以被推荐,所以每次将g[i].val >= k 的加入并查集,保证所构成的树/森林中所有的边权都是大于等于k的。跟我想法差不多,就是先离线下来,从大到小排列,原创 2023-10-17 22:38:22 · 144 阅读 · 0 评论 -
P1972 [SDOI2009] HH的项链(树状数组
将查询区间按照右端点为第一关键字 左端点为第二关键字,从小到大排序,如果一个石头在之前已经出现过,那么就将这个石头的种类尽量放到右边。同时开一个数组记录每个种类的石头的位置,这个种类石头的出现的上一位的种类数减去1。如果维护前缀的种类就是这个题的难点,用树状数组实现离线查询。原创 2023-10-05 19:47:32 · 69 阅读 · 0 评论 -
P2827 [NOIP2016 提高组] 蚯蚓
非正解,但是里面的思想还是很重要的,就是每个数都加q,不妨就把新的蚯蚓减去q, 用add来维护加了多少次。如果蚯蚓 a 比 b 先被切,那么他的子段就一定比b先切。正解需要能观察出一定的性质,原创 2023-09-06 10:39:07 · 60 阅读 · 0 评论 -
P1966 [NOIP2013 提高组] 火柴排队 (树状数组
通过调整b的位置 j1 j 2 q[i1] = j2 q[i2] = j1;q[i] = j 表示a的第i个数 和 b的第j个数相等。先离散化成 1 , 2 , 3, 4, 5 , n。本质上是个树状数组求逆序对,但是怎么弄确实很难想。最终使q[i] = i;这就是以a作为索引排序b。原创 2023-08-28 14:57:46 · 293 阅读 · 0 评论 -
P3605 Promotion Counting P(树状数组+dfs
res[x] = -已经大于该节点的数 + 总共比该节点大的数。所以先将前序比该节点的大的数都去掉,然后将后序中的数字插入,考虑在一条dfs 路径上,只关心子节点是否比当前节点的值大。原创 2023-08-28 12:30:53 · 45 阅读 · 0 评论 -
P2048 [NOI2010] 超级钢琴(贪心 + RMQ
然后就考虑选取次大值,其中次大值一定再 i+l-1 , k -1 或者 k + 1 , i+r-1 中。当前端点为 i 选择 i+l-1 i+r-1 中的最大值,位置为k,简单点说,就是选择一个最大值,从最大值的位置把区间分开,构成俩个新的待选区间。其实思路并不难,主要是代码实现方面脑子灵光不够。本质上来说就是RMQ问题。原创 2023-08-28 10:42:58 · 71 阅读 · 0 评论 -
P1198 [JSOI2008] 最大数 ( 线段树
关于线段树不不建树(针对单点修改时),单点修改也不用打lazy。把线段树的大小作为参数 函数中。原创 2023-08-25 17:57:29 · 56 阅读 · 0 评论 -
P1621 集合 ( 并查集和素数筛
【代码】P1621 集合 ( 并查集和素数筛。原创 2023-08-22 15:24:28 · 49 阅读 · 0 评论 -
P1714 切蛋糕 ( 单调队列 || st表
对于 i 枚举i-m,i-m+1, .... ,i-1 中最小的数字,枚举i+1 时 和 i 由很多重复 的枚举,就用单调队列进行优化。感觉是不是数据有点弱,总觉得这个有点问题,比如队列为空时的操作。单调队列其实挺版的题目,先想暴力的做法,先做个前缀和。感觉st表应该也行,静态查找区间最值,回头贴。原创 2023-08-21 23:11:28 · 126 阅读 · 0 评论 -
P4053 [JSOI2007] 建筑抢修(反悔堆
如果拿不上,就考虑从背包中拿出最终的物品,然后换上这个新物品,这样背包总重量会变小,但背包中的价值没变,-1 +1。反悔贪心,将建筑按照临界时间戳排序,另一个作为建筑的“重量” 类似背包把,每个建筑的价值都为1。记录背包的重量,如果能拿上这件物品,就直接拿。原创 2023-08-19 17:45:00 · 126 阅读 · 0 评论 -
P1253 扶苏的问题 ( 线段树
【代码】P1253 扶苏的问题。原创 2023-08-18 13:40:40 · 71 阅读 · 0 评论 -
P1438 无聊的数列 ( 线段树
线段树板子题,构建差分。原创 2023-08-18 11:45:03 · 48 阅读 · 0 评论 -
P3870 [TJOI2009] 开关 ( 线段树
其实关键在于lazy标记 通过这个实现每次查询的时候再修改。虽然是个线段树板子题,但也让我对线段树有了点理解。spread以后记得把懒标记清除。原创 2023-08-17 22:12:13 · 125 阅读 · 0 评论 -
P3374 【模板】树状数组 1
当前子节点 - 该子节点的区间长度 = 另一个子节点。提取某个数字的最后一位 代表这个数字管辖的数字数量。当前节点 + 区间长度 = 父节点。原创 2023-08-17 19:23:32 · 26 阅读 · 0 评论 -
P3045 [USACO12FEB] Cow Coupons G ( 反悔堆
如果补的差价+物品的优惠值 <= 直接再买一个(和前面的物品并不是同一个) 那就直接不用优惠卷买。比如你现在已经用了k张优惠卷,如果你想要用更换优惠卷,就用补差价,利用差值来表示更换优惠卷的操作。原创 2023-08-15 18:39:31 · 91 阅读 · 0 评论 -
P1878 舞蹈课(堆+双链表
一开始我是想只存左点,然后根据r[i] 求 右边的点,但是由于你当时入堆时的值 是 对应的x,y。如果y先被删掉,x就和别的 点连起来了。大概就是这样,用双链表维护整个序列。堆中要存三个元素,值 x,y。维护双链表的正确用法,原创 2023-08-01 12:55:32 · 208 阅读 · 0 评论 -
1196 [NOI2002] 银河英雄传说(带权并查集
size数组维护一个并查集的数量,每次merge的时候修改并查集头元素的cnt。通过一个cnt数组记录当前节点到root的距离,在递归对其进行修改求和。原创 2023-08-01 11:31:53 · 187 阅读 · 0 评论 -
P1197 (并查集 + 图的连通性
【代码】P1197 (并查集。原创 2023-07-27 13:03:09 · 159 阅读 · 0 评论 -
P3620 数据备份 ( 堆+贪心 + 双链表
1原创 2023-07-11 14:00:11 · 163 阅读 · 0 评论 -
acw 146 (堆
跟那个序列,无非就是要类似分治的做法,每次将俩个序列合成一下。原创 2023-07-11 12:13:54 · 30 阅读 · 0 评论 -
P1631 序列合并 ( 堆
按照我原本的思路,是维护一个堆,其中元素为{i,j , val} 同时用set进行对{i,j}进行去重。对于一个(i,j) 如果他是第k个小的数,那么(i+1,j) 和(i,j+1)就有可能是第k+1小的数字。从别人那得到的启发,先将a[0] + b[i] 加入堆中 这就想打与,把所有的i ,j+1加入到了堆中,那么从堆中取出一个数字后,只要将i+1 , j 在放入堆中就就可以了。于是将这俩个数字加入堆中(当然要去重啦。原创 2023-07-11 11:58:36 · 166 阅读 · 0 评论 -
acw.145 ( 堆 + 并查集
将天数排成一个数轴,f[i] 记录离i最近的free的日子,一开始每个数都指向自己,当这个日子被占用后,就有f[i] = f[i-1]显然的,可以通过一个并查集来维护,每个被占用的天数连着离自己的最近free 天,将价值按照降序进行排列,对于这个东西,如果能在过期前处理掉,就去卖掉。当pos = 0 时就放不下 ,就跳过这个物品。原创 2023-07-10 16:55:55 · 80 阅读 · 0 评论 -
P4551 最长异或路径 (tire树
从根节点开始,跑一下每个节点的异或值,因为异或有抵消的性质,所以从x 到 y的异或值,就是dis[x] ^ dis[y]再跑一下最大异或对就行了。原创 2023-07-10 13:25:23 · 45 阅读 · 0 评论 -
P3373 【模板】线段树 2
涉及乘法的线段树其实并没有那么复杂,当乘上一个数k时,同步将懒标记中的add乘上 k,让add先更新好,类似于本来add内容还没有加到子节点,所以考虑把他跟新以后再加到子节点中,然后如果此时更新叶节点 val = (val + add1) * k = val *k + add1 * k = val*k + add2。这样spread时候,对于叶节点来说,add已经是计算好的,所以应该先算mul里面的值,类似 叶节点val 父节点add1(还没有更新下来的add)原创 2023-07-05 22:27:06 · 239 阅读 · 0 评论 -
P3958 奶酪 ( 并查集
判断的时候最后不要开放,有浮点数不精准。纯纯暴力 , 跑了400ms有点慢。原创 2023-07-05 13:33:46 · 59 阅读 · 0 评论 -
P1111 修复公路 ( 并查集
并查集中维护连通块中点的数量,无非就是多开一个数组维护点的数量。原创 2023-07-05 12:35:10 · 100 阅读 · 0 评论 -
P3865 【模板】ST 表
【代码】P3865 【模板】ST 表。原创 2023-07-04 17:27:26 · 39 阅读 · 0 评论 -
P3372 【模板】线段树 1
7原创 2023-07-03 11:41:16 · 160 阅读 · 0 评论 -
P1160 队列安排 (链表
水一发,就是维护普通的双向链表,无法就是把value 换成对应的下表值 idx。还有就是有重复删除的标记一下。原创 2023-05-21 10:01:10 · 75 阅读 · 0 评论 -
P2251 质量检测 (单调队列
好像有st表的做法,学会了再来补。原创 2023-05-21 11:05:01 · 59 阅读 · 0 评论 -
P2580 于是他错误的点名开始了 ( 字典树
查询循环中的推出是判断字符串能否存在,循环后得分别判断三件事,字符串是否为1,这个字符串虽然存在但是不是名字,是否重复。原创 2023-05-22 22:46:25 · 62 阅读 · 0 评论 -
abc 306 E
同时有个特别的点,就是n == k 时,minset中是没有元素,因此比较的前提还得是minset不为空。大概思路是通过俩个set MaxSet 和 MinSet维护前k个大的数 和 其他数。学会重载比较的写法 < 就是升序排列,如果有俩个相同的元素,得有多个判断条件,否则会re。而后比较max的最小值,和min的最大值,如果后者更大,就交换他们俩个,每次从集合中查找这个数字(logn) ,取出,修改后插回(logn)通过val的值对集合进行排序。原创 2023-06-19 22:21:38 · 74 阅读 · 0 评论 -
E - Good Graph (abc E 并查集
对于添加的边 ,将所连的点的祖先求出,如果这对祖先在set中,那么这个图就不是good。对于需要满足不连通的点 的 k组点, 将他们的祖先找到,放到set中,同时使set尽量有序,即把较大的值或较小的放在first的位置。实际是一个并查集的水题,早知道看个榜单啦,set尽量保证first 有序。原创 2023-06-03 22:57:12 · 113 阅读 · 0 评论