摘要:
普通二叉树与平衡树初步 无旋Treap,Treap,Splay 见题库-网课-Treap和Splay。 普通平衡树 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入数值x。 删除数值x(若有多个相同的数,应只删除一个)。 查询数值x的排名(若有多个相同的数,应输出最 阅读全文
posted @ 2020-10-23 19:15
林生。
阅读(70)
评论(0)
推荐(0)
摘要:
点分治 树 给定一个有N个点(编号0,1,…,N-1)的树,每条边都有一个权值(不超过1000)。 树上两个节点x与y之间的路径长度就是路径上各条边的权值之和。 求长度不超过K的路径有多少条。 输入格式 输入包含多组测试用例。 每组测试用例的第一行包含两个整数N和K。 接下来N-1行,每行包含三个整 阅读全文
posted @ 2020-10-23 19:13
林生。
阅读(56)
评论(0)
推荐(0)
摘要:
分块 将数组分为N½块,算出每块对应的满足条件的值,在暴力的基础上提升效率。 蒲公英 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。 为了简化起见,我们把所有的蒲公英看成一个长度为 n 的序列a1,a2,…,ana1,a2,…,an,其中aiai为一个正整数,表示第 i 棵蒲公英的 阅读全文
posted @ 2020-10-23 19:10
林生。
阅读(141)
评论(0)
推荐(0)
摘要:
主席树 1.普通主席树 静态区间查询第k大的数。 对于一个长度为n数组,数值离散化之后范围为1~\(s[0]\),则开n棵范围s[0]棵线段树,每次查询l,r区间时,取出树r和树l-1进行计算,树r-树l-1得到的就是树l-r的值。 但由于每个点开一个线段树内存消耗很大,同时易知每棵树和前一棵树相比 阅读全文
posted @ 2020-10-23 19:02
林生。
阅读(66)
评论(0)
推荐(0)
摘要:
线段树 即对数组进行二分保存。 由图易得,除去最后一层,树的深度为$log$2\(N\),则树的大小约为$N2$≤20+21+22+……+2log2N/2<\(N*4\),但在一些特殊的图上,可能会大于$N4$,所以一般而言,线段树数组开到N*8的大小。 主要操作 1.单点修改 注意左右节点和父节 阅读全文
posted @ 2020-10-23 18:56
林生。
阅读(106)
评论(0)
推荐(0)
摘要:
树状数组 树状数组即利用二进制进行储存,若x的最低位1在第i位,则x储存x-2i~x的数值,可利用二进制进行快速修改与查询。 树状数组便于快速查询前缀和,查询和修改的复杂度皆为$O(log2N)$,而普通前缀和查询的复杂度为$O(1)$,但修改的复杂度为$O(N)$,效率太低。 一维树状数组 修改函 阅读全文
posted @ 2020-10-23 17:48
林生。
阅读(136)
评论(0)
推荐(0)
摘要:
并查集 将满足某一条件的值加入同一集合 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 阅读全文
posted @ 2020-10-23 17:40
林生。
阅读(100)
评论(0)
推荐(0)
摘要:
搜索的本质是模拟。 ###P1092 虫食算 #include<bits/stdc++.h> using namespace std; const int N=30; string ss; int n,val[N],s[4][N]; bool use[N]; void dfs(int x,int y 阅读全文
posted @ 2020-10-23 17:38
林生。
阅读(111)
评论(0)
推荐(0)

浙公网安备 33010602011771号