随笔分类 - 数据结构进阶
摘要:CDQ分治 思想 分治,二分进行计算。将区间左半部分作为已知,右半部分作为查询进行计算。 陌上花开(三维偏序) 关键思想:按abc关键字进行排序,再以b为关键字进行归并排序。 因为先按a排序:每次归并时都一定有右区间的a大于等于左区间的a。 因为先按abc进行排序,故不会出现{1,1,3}{1,1,
阅读全文
摘要:普通二叉树与平衡树初步 无旋Treap,Treap,Splay 见题库-网课-Treap和Splay。 普通平衡树 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入数值x。 删除数值x(若有多个相同的数,应只删除一个)。 查询数值x的排名(若有多个相同的数,应输出最
阅读全文
摘要:点分治 树 给定一个有N个点(编号0,1,…,N-1)的树,每条边都有一个权值(不超过1000)。 树上两个节点x与y之间的路径长度就是路径上各条边的权值之和。 求长度不超过K的路径有多少条。 输入格式 输入包含多组测试用例。 每组测试用例的第一行包含两个整数N和K。 接下来N-1行,每行包含三个整
阅读全文
摘要:分块 将数组分为N½块,算出每块对应的满足条件的值,在暴力的基础上提升效率。 蒲公英 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。 为了简化起见,我们把所有的蒲公英看成一个长度为 n 的序列a1,a2,…,ana1,a2,…,an,其中aiai为一个正整数,表示第 i 棵蒲公英的
阅读全文
摘要:主席树 1.普通主席树 静态区间查询第k大的数。 对于一个长度为n数组,数值离散化之后范围为1~\(s[0]\),则开n棵范围s[0]棵线段树,每次查询l,r区间时,取出树r和树l-1进行计算,树r-树l-1得到的就是树l-r的值。 但由于每个点开一个线段树内存消耗很大,同时易知每棵树和前一棵树相比
阅读全文
摘要:线段树 即对数组进行二分保存。 由图易得,除去最后一层,树的深度为$log$2\(N\),则树的大小约为$N2$≤20+21+22+……+2log2N/2<\(N*4\),但在一些特殊的图上,可能会大于$N4$,所以一般而言,线段树数组开到N*8的大小。 主要操作 1.单点修改 注意左右节点和父节
阅读全文
摘要:树状数组 树状数组即利用二进制进行储存,若x的最低位1在第i位,则x储存x-2i~x的数值,可利用二进制进行快速修改与查询。 树状数组便于快速查询前缀和,查询和修改的复杂度皆为$O(log2N)$,而普通前缀和查询的复杂度为$O(1)$,但修改的复杂度为$O(N)$,效率太低。 一维树状数组 修改函
阅读全文
摘要:并查集 将满足某一条件的值加入同一集合 int x=find(u),y=find(v); f[x]=v; 查找函数 void find(int x) { return f[x]!=x?f[x]=find(f[x]):x; } 普通并查集 银河英雄传说 有一个划分为N列的星际战场,各列依次编号为1,2
阅读全文

浙公网安备 33010602011771号