竞赛算法
高级数据结构的知识
rena11
这个作者很懒,什么都没留下…
展开
-
线段树
int a[n]; //原数组int minu[n*4]; //保存所有节点int min(int a,int b){ return a<b?a:b;}int pushup(int o){ return min(minu[2*o],[2*o+1]);}void build(int o,int left,int right){ //传入当前结点位置,区间的左右值 if(left==right) { minu[o]=a[left]; //叶子结点存储数组本身的值 .原创 2021-09-22 17:04:05 · 57 阅读 · 0 评论 -
矩阵修改(树状数组法)
1.将某一段区间的所有数值变化相同的值,查找某一位置的元素值①区间修改+单点查询(一维)给定数组 a[n], 修改区间 [ t, r] 上的值,将每个位置改变d;树状数组的作用是维护某个数组的前缀和,而且单点修改比较方便。为了用到树状数组,使得a[n]成为某一数组的前缀和,需要构造差分数组。对于差分数组 b[i]=a[i]-a[i-1] ;此时a[i]=b[i]+b[i-1]+……+b[1];若改变区间[t,r]的所有值,只需要 b[ t ] +=d ,b[ r+1]-=d...原创 2021-09-22 16:38:34 · 477 阅读 · 0 评论 -
树状数组及求和
1.概念给定一个n个数字的数列,要求一下操作: ①改变第k个数字,增加或减少一个值; ②查询第i个到第j个数的和一般数组解法: O(1) O(n);树状数组 O(logn) O(logn);2.构建假设给定数列A[1]->A[8]序列C[]为树状数组 特点:(1)满二叉树,且二叉树中的每个叶子节点为A[]的一个元素 (2) C[i]为A[i]对应的那一列的最高的节点找出规律:i的二进制中从右到左连续0为x,则C[i...原创 2021-09-10 22:46:55 · 347 阅读 · 0 评论 -
并查集应用-判断亲戚关系
题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入格式 第一行:三个整数n,m,p,(1 <= n<=20000, 1<= m<=1000000, 1 <= p<=1000000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。 以下m行:每行原创 2021-09-10 22:19:24 · 751 阅读 · 0 评论 -
并查集基础知识
1.概念:将编号分别为1…N的N个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合。常见两种操作:合并两个集合查找某元素属于哪个集合,判断两个元素是否属于同一个集合。是一种树形的数据结构,又称“不相交集合”,用于处理一些不相交集合的合并及查询问题。2.数学模型:并查集的数学模型是若干不相交集合的集合S={A,B,C,...},它支持以下的运算: (1)INITIAL(A,x):构造一个取名为A的集合,它只包含一个元素x; (2)MERGE...原创 2021-09-10 22:06:48 · 106 阅读 · 0 评论