
0x40 数据结构进阶
文章平均质量分 63
并查集(带权并查集、扩展域并查集)、线段树、树状数组
常欢愉皆胜意且顺遂
记得一定要努力,不然往后余生,做饭是你,洗衣是你,做家务是你……是你是你还是你
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
超有爱的并查集~(转载)
此文章是我初学并查集时看的一篇文章,感觉写的非常好,但是原文链接好像已经打不开了作者:飘过的小牛原文:https://blog.youkuaiyun.com/niushuai666/article/details/6662911例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通转载 2021-11-21 18:41:32 · 128 阅读 · 0 评论 -
主席树简介及代码模板
主席树全称是可持久化权值线段树,通常用来解决区间第 k 小的问题。可持久化数据结构 (Persistent data structure) 总是可以保留每一个历史版本,并且支持操作的不可变特性 (immutable)。权值线段树是记录每个权值出现次数的一种线段树。为什么要使用主席树?如果我们要求区间第 k 小的数,如果暴力一点,可以每插入一次开一棵线段树,但是空间一定会爆掉。所以要使用主席树,在原有空间的基础上,进行插入。原创 2020-10-28 11:10:53 · 635 阅读 · 0 评论 -
线段树的例题
文章目录影子的宽度区间平方和问题:区间开根号问题stars逆序对影子的宽度题目描述桌子上零散地放着若干个盒子,盒子都平行于墙。桌子的后方是一堵墙。如图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?输入第1行:3个整数L,R,N。-100000 <=L<=R<= 100000,表示墙所在的区间;1<=N<=100000,表示盒子的个数接下来N行,每行2个整数BL, BR,-100000 <=BL<=BR<=原创 2020-11-29 16:26:47 · 408 阅读 · 0 评论 -
线段树简介及代码模板
树状数组可以在 O(logn) 的时间复杂度内实现单点修改、区间查询。相对于树状数组,线段树更加通用,代码更长,功能也更加强大。线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。线段树可以在 O(logn) 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。线段树的一些性质:1、每个节点都代表一个区间2、根节点代表的区间是整个统计范围,如 [1, N]3、线段树的每个叶节点都代表长度为 1 的元区间 [x, x]4、对于每个内部节点原创 2020-10-13 20:57:20 · 642 阅读 · 0 评论 -
洛谷题单 206【数据结构2-2】线段树与树状数组
文章目录P3374 【模板】树状数组 1P3368 【模板】树状数组 2P3374 【模板】树状数组 1单点增加和区间查询#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long ll;int n, m, a[N]; // a 为原数组 ll c[N]; // c 为树状数组 // 返回x的二进制数下最小2的次幂 int lowbit(int x){ retu原创 2020-12-26 17:50:10 · 319 阅读 · 0 评论 -
树状数组简介及代码模板
树状数组是一种基于二进制来将区间 [1, x] 分成 logx 个小区间的数据结构,其基本用途是维护序列的前缀和。基本操作1、lowbit,返回x的二进制数下最小2的次幂2、ask,查询前缀和3、add,单点修改lowbit 操作:lowbit(x):返回x的二进制数下最小2的次幂例如:因为7 = 0111,所以lowbit(7) = 1因为6 = 0110,所以lowbit(6) = 2因为4 = 0100,所以lowbit(4) = 4int lowbit(int x){ re原创 2020-09-30 08:33:54 · 543 阅读 · 0 评论 -
Lost Cows
N (2 <= N <= 8,000) cows have unique brands in the range 1…N. In a spectacular display of poor judgment, they visited the neighborhood ‘watering hole’ and drank a few too many beers before dinne...原创 2020-02-23 15:46:12 · 243 阅读 · 0 评论 -
Just a Hook
In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length.Now Pudge wa...原创 2020-02-20 17:04:29 · 267 阅读 · 0 评论 -
情人节的灯泡
链接:https://ac.nowcoder.com/acm/problem/15172来源:牛客网题目描述情人节到了,小芳和小明手牵手,打算过一个完美的情人节,但是小刚偏偏也来了,当了一个明晃晃的电灯泡,小明很尴尬,就和小刚说,我交给你个任务,你完成了我俩就带你玩,否则你就回家吧。小刚很有当单身狗的觉悟,他坚决不想让小明过好情人节,同为单身狗的你能帮帮他吗?现在有一个n×n(1 <=...原创 2020-02-19 23:30:01 · 312 阅读 · 0 评论 -
B - I Hate It
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 )...原创 2020-02-12 23:17:06 · 248 阅读 · 0 评论 -
C - A Simple Problem with Integers
DescriptionYou have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to as...原创 2020-02-12 17:28:22 · 194 阅读 · 0 评论 -
A - 敌兵布阵
Problem DescriptionC国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中...原创 2020-02-12 15:26:41 · 323 阅读 · 0 评论 -
关押罪犯(扩展域并查集)
扩展域并查集(不会二分图 QAQ)我们先按照两个人之间的仇恨从大到小排序,先解决大的仇恨,直到有仇恨无法解决,这样使得发生的冲突尽可能小因为一个罪犯有朋友和仇人,需要开2倍大小的并查集,表示朋友域和仇人域如果a和b是仇人,那么就进行:1)合并a和b的仇人域(表示a和b的仇人是朋友,关入同一个监狱)2)合并a的仇人域和b(表示a的仇人和b是朋友,关入同一个监狱)#include <bits/stdc++.h>using namespace std;const int N = 4..原创 2021-01-24 20:08:25 · 359 阅读 · 0 评论 -
带权并查集简介及代码模板
简介:并查集实际上是由若干课树构成的森林,我们可以在树中的每条边上记录一个权值,即维护一个数组 d,用 d[x] 保存节点 x 到父节点 fa[x] 之间的边权。在每次路径压缩后,每个访问过的节点都会直接指向树根,如果我们同时更新这些节点的 d 值,就可以利用路径压缩过程来统计每个节点到树根之间的路径上的一些信息。这就是所谓的“边带权”的并查集。——摘录自蓝书初始化操作:void init(int n){ for (int i = 1; i <= n; i++) { fa[i] = i原创 2020-09-30 16:35:05 · 311 阅读 · 0 评论 -
kuangbin带你飞 并查集专题
文章目录A - Wireless NetworkB - The SuspectsC - How Many TablesA - Wireless Network发现时限是10s,那么就直接开始暴力#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;const int原创 2020-11-11 14:18:27 · 401 阅读 · 0 评论 -
并查集简介及代码模板
#include <cstdio>#include <cstring>const int N = 5e4;int bcj[N + 5];//记录每个节点的父节点void init(int n)//n棵有一个节点的树 { for (int i = 1; i <= n; i++) bcj[i] = i;}int find(int x)//找到此节...原创 2020-01-12 19:03:57 · 519 阅读 · 0 评论 -
E - 食物链(扩展域并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话...原创 2019-04-30 21:57:35 · 605 阅读 · 0 评论 -
并查集入门题
B - 小希的迷宫Sample Input6 8 5 3 5 2 6 45 6 0 08 1 7 3 6 2 8 9 7 57 4 7 8 7 6 0 03 8 6 8 6 45 3 5 6 5 2 0 0-1 -1Sample OutputYesYesNo这道题除了基本的判断跟结点的数量是否为1,还要在每次路径输入的时候判断两房间是否...原创 2019-04-30 20:53:01 · 1109 阅读 · 0 评论 -
A - Wireless Network(并查集)
DescriptionAn earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all comput...原创 2019-04-29 22:05:02 · 310 阅读 · 0 评论 -
并查集基础练习
A - Cube StackingDescriptionFarmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes labeled 1 through N. They start with N stacks, each containing a single cube.Farme...原创 2019-04-29 20:23:52 · 1660 阅读 · 0 评论 -
线段树
文章目录245. 你能回答这些问题吗245. 你能回答这些问题吗刚刚做完这道题,心情有点复杂,先把题解链接发上来,我先去冷静一下链接:https://www.acwing.com/solution/content/19422/#include <bits/stdc++.h>using namespace std;const int MOD = 1e9 + 7;const int N = 5e5 + 10;typedef long long ll;ll a[N];str原创 2020-11-29 16:26:19 · 208 阅读 · 0 评论 -
树状数组
文章目录241. 楼兰图腾242. 一个简单的整数问题241. 楼兰图腾类似于求逆序对,求出每个数前面有多少个比它大/小,每个数后面有多少个比它大/小最后相乘再累加就是答案#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 5;typedef long long ll;int n, m, a[N]; // a 为原数组 ll c[N]; // c 为树状数组 ll l1[N], r1[N], l原创 2020-10-15 10:47:27 · 300 阅读 · 0 评论 -
并查集
237. 程序自动分析先将数字进行离散化,再用并查集合并相等的数字,并将不相等的数字记录下来最后比较两个数字,如果两个数字不在一个并查集内,则说明可以满足条件记得要初始化所有变量和数组#include <cstdio>#include <cstring>#include<tr1/unordered_map>using namespace s...原创 2020-03-01 11:15:53 · 452 阅读 · 0 评论