数据结构-杂类
文章平均质量分 51
数据结构
ZSJZ_liuzian
这个作者很懒,什么都没留下…
展开
-
Treap 模板
#include<cstdio> #include<cstring> #include<cstdlib> #define N 100010 using namespace std; int len=0,root=1; struct { int v,s,l,r,si; }a[N]; void update (int x) { a[x].si=a[a[x].l].si+a[a[x].r].si+1; } void split(int rt,int &x,int &原创 2021-04-06 09:49:55 · 87 阅读 · 0 评论 -
Splay(普通、区间翻转) 模板
Splay_普通 #include<cstdio> #include<cstring> using namespace std; #define N 100010 #define mn 1e+8 struct { int v[2]={0,0},s=0,x=mn,si,fa; }f[N]; int len=1,root=1,n; void update(int x) { f[x].si=f[f[x].v[0]].si*(f[x].v[0]>0)+f[f[x].v[1]].si原创 2021-04-06 09:48:56 · 122 阅读 · 0 评论 -
JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树(平衡树单旋+权值线段树)
JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树 题目大意 给出两棵Treap,大小分别为n,mn,mn,m,每个点的priorityprioritypriority值为子树大小(因此满足大根堆性质),QQQ次修改(修改是永久的),每次单旋一个节点,求修改前和每次修改后后两树合并之后的所有节点深度之和。合并按照Treap的合并方式,左树根为xxx,右树根为yyy时,当sizex≥sizeysize_x\ge size_ysizex≥sizey时以xxx为根,否则反之。 1≤n,原创 2021-03-31 16:51:02 · 174 阅读 · 0 评论 -
洛谷 P5089 [eJOI2018]元素周期表(二分图+并查集)
洛谷 P5089 [eJOI2018]元素周期表 题目大意 n∗mn*mn∗m矩阵中已有若干点,只要有构成矩形(平行于坐标轴)的四个点中三个,就可以补充剩下一个,求把矩阵填满最少需要添加多少点。 n,m≤2∗105n,m\le2*10^5n,m≤2∗105 题解 把行和列拆开看成二分图,发现每次添加点的操作,是在已经连通的三个点中把没连的边给连上,连通块的数量没有改变。 同时,不难发现任何一个连通块中剩下的边都是可以直接加上的。 现在需要把矩阵中所有点都填满,相当于所有的边都要连上,那么根据上面的结论原创 2020-11-06 11:08:14 · 163 阅读 · 0 评论 -
eJOI2018 Problem D Chemical table(二分图+并查集)
eJOI2018 Problem D Chemical table 题目大意 n∗mn*mn∗m矩阵中已有若干点,只要有构成矩形(平行于坐标轴)的四个点中三个,就可以补充剩下一个,求把矩阵填满最少需要添加多少点。 n,m≤2∗105n,m\le2*10^5n,m≤2∗105 题解 把行和列拆开看成二分图,发现每次添加点的操作,是在已经连通的三个点中把没连的边给连上,连通块的数量没有改变。 同时,不难发现任何一个连通块中剩下的边都是可以直接加上的。 现在需要把矩阵中所有点都填满,相当于所有的边都要连上,原创 2020-11-06 11:09:47 · 4099 阅读 · 0 评论 -
JZOJ 6866. 【2020.11.16提高组模拟】路径大小差(点分治+树状数组)
JZOJ 6866. 【2020.11.16提高组模拟】路径大小差 题目大意 问树上有多少点对之间路径边权max−min=kmax-min=kmax−min=k,kkk为定值。 k≤n≤2∗105k\leq n\leq2*10^5k≤n≤2∗105. 题解 其实这题比较套路,并不难想。 关于树上路径计数的问题,一般先考虑点分治能不能实现,发现是可以的。 按照一般点分治的套路,找到某个子树重心后,记录每个点到它的路径边权max,minmax,minmax,min,有两种情况,一种是重心为路径的一端,直接原创 2021-01-07 20:12:19 · 201 阅读 · 0 评论 -
JZOJ 3161. 【GDOI2013模拟2】排序(栈)
JZOJ 3161. 【GDOI2013模拟2】排序 Time Limits: 1000 ms Memory Limits: 32768 KB 题目 Description 给你NNN个学生的名字,要求有相同前缀的名字排在一起,具体规则如下: 对于列表中任意两个有相同前缀的名字,排在这两个名字中间的名字也必须拥有相同的前缀。 例如,名字MARTHA和MARY,这两个名字具有相同的前缀MAR,所以...原创 2019-02-17 08:40:47 · 229 阅读 · 0 评论