
数据结构
文章平均质量分 60
数据结构
Socup_
这个作者很懒,什么都没留下…
展开
-
DSU on tree树上启动式合并
如果存在的话,我们之间修改根节点,然后删除整个子树的影响(因为这个点一定会修改,相当于直接把这个子树砍掉,给这个点打上一个标记),然后回溯继续dfs;给一个树,树上每个顶点都有一个权值,我们可以每次操作可以把一个点的点权值修改成任意值,问至少修改多少次才能不存在一条路径使得路径的异或和0。对于每个节点,如果我们依次处理每个子树看看子树中的链能产生多少种异或和(用set维护),每次处理完子树后判断一下是否存在。(某个之前子树能产生的链的异或和)^ w[u] ^ (当前子树能产生的链的异或和)==0;...原创 2022-07-22 15:32:35 · 138 阅读 · 1 评论 -
树链剖分题单
即二分权值最大的路径的权值最小值,设为mid,只要满足所有路径长度>mid的路径同时减去一条边权后的值mid的边都经过,且这条被删去的边要最长。2u不是rt的祖先,即u不在1->rt这条路径上,无所谓,直接按u为根的子树返回。3u是rt的祖先,即u在1->rt这条路径上,最特殊的情况。就会发现rt为根时,u子树覆盖不到的地方是v及v的子树。一定是动态开点,如果建10^5的线段树内存早就爆了。找到路径u->rt上的u的直系儿子v,...原创 2022-07-13 22:49:16 · 220 阅读 · 0 评论 -
笛卡尔树! ST表!莫队
板子P5854 【模板】笛卡尔树ST表模板题+板子原创 2022-07-04 10:24:17 · 145 阅读 · 0 评论 -
树状数组,线段树学习笔记
树状数组解决的问题:区间求和;主要模板int lowbit(int x){ return x & -x;}void add(int x,int c)//修改单点值{ for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c;}int sum(int x){ int res=0; for(int i=x;i;i-=lowbit(i)) res+=tr[i]; return res;}还可以当做差分数组思原创 2022-01-11 21:53:46 · 124 阅读 · 0 评论 -
可持久化线段树(主席树)+ treap 学习笔记
可持久化线段树(主席树)可持久化概念:可持久化实质上就是存储该数据结构所有的历史状态,以达到高效的处理某些信息的目的。问题:题目链接:给定长度为N的序列A,有M次询问,求在[l,i]区间内第k小的数是多少。做法:由题意知道我们肯定要对区间进行排序,但是我们的排序不是每次询问才排序,是初始化就排序并离散化——针对数字较大但数据不大的情况下排序离散化完毕后,以离散化数组建主席树,设ii属于区间[1,n],对原数组的[1,i]区间的数做统计(例如下图,区间中按离散化数组顺序统计1的个数、2的个数、3的原创 2022-01-19 01:05:20 · 212 阅读 · 0 评论 -
splay的一些操作
秦同学的详细版本splay就是一种将树上的一个节点经过旋转到节点的一种操作,来保持树的平衡splay本质:二叉搜索树特点:结点x的左子树权值都小于x的权值,右子树权值都大于x的权值如果当前处于共线状态的话,那么先旋转y,再旋转x.这样可以强行让他们不处于共线状态,然后平衡这棵树.如果当前不是共线状态的话,那么只要旋转x即可.普通平衡树基本上每个平台都有的模板题。为什么要splay?仅仅是插入不是插进去就行吗?成不成为根节点有什么关系?这是为了查找比x小/大的第一个数做铺垫,因为有可能x原创 2022-02-22 16:55:31 · 492 阅读 · 0 评论