数据结构
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
20200726 T3 树高【ETT(dfs序splay)维护同色边连通块】
题目描述n,m≤105n,m\le10^5n,m≤105,点的颜色范围为 [1,30][1,30][1,30]题目分析LCT可以维护黑白两色,黑点向父亲连边,实际连通块去掉根。但是整个连通块同时变色就不好整了。用ETT(就是dfs序splay)维护边连通块,这样改变颜色的时候只会改变这条边与上下的连通性。初始时看做同一种颜色,按dfs序建树,splay点标对应原树点标。一个边连通块为一棵以dfs序为关键字的 splay。上图中同一种颜色的箭头指向的节点在同一棵 splay 中。(link原创 2020-07-28 09:54:07 · 309 阅读 · 0 评论 -
20200727 T3 小w维护序列【平衡树预留插入位置+三维数点】
题目描述题目分析先考虑没有插入删除的情况。区间不同的数有个常见的 trick 是把它表示为二维的点 (prei,i)(pre_i,i)(prei,i),区间查询就变成数第一维在 [0,l−1][0,l-1][0,l−1],第二维在 [l,r][l,r][l,r] 的点。修改就是去掉原来的点,加入新的点,可以用 map 套 set 维护。(离散化好麻烦,复杂度也没区别)询问一也可以通过简单的处理把不同点之间的贡献分离开:那么这就是一个三维数点问题,cdq分治即可。(学到一个树状数组套树状数组原创 2020-07-27 21:26:54 · 241 阅读 · 0 评论 -
20200725 T3 sort【区间异或,区间排序,平衡树 + trie】
题目描述长度为 nnn 的序列,0≤ai<2320\le a_i<2^{32}0≤ai<232要求支持 区间与,区间或,区间异或,区间排序。输出最终的 aaa 序列。n,m≤105n,m\le10^5n,m≤105题目分析ai<16a_i<16ai<16 的时候可以线段树维护每种数的个数,排序的时候提取每种数然后区间赋值。看似是 log3log^3log3 实际上却跑得很快,(可能有些数没有;赋值时的pushup可以小常数memset)正解:平衡树维护原创 2020-07-26 16:40:20 · 530 阅读 · 1 评论 -
可持久化题目
LOJ#120. 持久化序列鉴于基本上没怎么考过可持久化平衡树,可能很久都没写了。。所以放了一道模板题来练手。福利题,可自行跳过值得一提的是可持久化非旋Treap在split时新建点之后,左树的右链和右树的左链都是新建的点,因此merge这两棵树时不需要再新建点(如果不需要分裂的版本的话)。虽然按版本树dfs用可撤销数据结构也可以过,但还是请自觉强制在线...原创 2020-07-14 21:17:58 · 283 阅读 · 0 评论 -
LOJ#517. 「LibreOJ β Round #2」计算几何瞎暴力【全局异或、排序,区间求和】
题目描述:link题目分析:editorial空间其实超了512M,不过评测算的是使用的最大内存…Code(基本上薅的LanrTabe的代码…莫名其妙rk1??):#include<bits/stdc++.h>#define maxn 200005#define LL long longusing namespace std;int n,N,m,Xor,Rev,q[maxn],last,ch[maxn*30][2],tot;struct node{ int a[30]原创 2020-07-07 15:02:27 · 282 阅读 · 0 评论 -
51nod1819 黑白树 V2【树链剖分求与黑点LCA的和 + 子树黑白翻转】
题目描述:给定一棵以1为根的有根树,点可能是黑色或白色,操作如下。选定一个点x,将x的子树中所有到x的距离为奇数的点的颜色反转。选定一个点x,将点x的颜色反转。选定一个点x,询问所有黑点y(包括点x)与点x的lca(最近公共祖先)的和。 (标号)、n,m≤200000n,m\le200000n,m≤200000题目分析:这狗x数据结构写得我头皮发麻首先这个与所有黑点的LCA的标号和就很标新立异将每个点的权值记为(u−fa[u])∗子树中的黑点个数(u-fa[u])*子树中的黑点个数(u原创 2020-05-17 21:34:28 · 277 阅读 · 0 评论 -
Codeforces1034D Intervals of Intervals【前k大区间之和+ODT+差分+单调】
题目描述:题目分析:先考虑如何计算一个“区间的区间”的权值。把区间按照 111 到 nnn 的顺序依次加进来,维护每个位置最后被覆盖的时间。对于“区间的区间” [l,r][l,r][l,r],它的权值就是加入111到rrr后,最后覆盖时间≥l\ge l≥l的位置的长度之和。维护被覆盖的最后时间有个经典的方法:把覆盖时间相同的位置合并成一段,然后用set维护它们,每次只会添加至多两个段,...原创 2020-04-30 09:32:02 · 375 阅读 · 0 评论 -
模拟赛20200207 Day3
T1:题目描述:题解:n≤20n\le20n≤20的时候可以状压求出每个连通块的点分方案数。然后就自闭了。题解告诉我们,两棵点分树是可以合并的!两棵结构一定的点分树通过一条边连接后可以形成一些新的点分树,方案数与连边的两个点在点分树中的深度有关,并且在新的点分树中原来的两棵树的点分顺序是不变的。画出左链右链,合并的过程有点类似于Treap的merge操作。Code:#incl...原创 2020-02-07 22:21:18 · 131 阅读 · 0 评论 -
NOI模拟赛20200102 T3 卡空间二维数点 + 被矩形覆盖次数【KD树 + 主席树】
题目描述:n,m,q≤105n,m,q\le10^5n,m,q≤105 时间限制3s,空间限制256M题目分析:(罪恶王冠加深了题目的自闭氛围。。。 )操作3好说,就一个主席树预处理,把矩形拆成两条竖直的线差分,单点查询。(也可以拆成四个点差分)。只是注意离散化的时候要将矩形的x0-1也要加入离散化数组中(lower_bound时要用到),还有主席树的区间修改的空间复杂度一次可以达到4×...原创 2020-01-03 23:03:49 · 140 阅读 · 0 评论 -
CodeForces #539 div1 C. Sasha and a Patient Friend【线段树】
题目描述:题目分析:把时间看做线段上的一个个格子组成,每个格子的水量变化由格子开始的水速决定。水速是很容易用线段树维护的,所以区间[l,r]的水量变化就可以维护。询问就只需要在线段树上二分就行了。具体的,线段树节点的成员是这样的(注意时间范围很大,而下面的代码并没有离散化所以是动态开点的):struct node{ int ch[2],v;//左右儿子,区间起始点的水速(只有l==...原创 2019-05-18 21:11:57 · 284 阅读 · 0 评论 -
BZOJ 3435: [Wc2014]紫荆花之恋 【(替罪羊树式)"动态"点分治 + Treap】
BZOJ 传送门洛谷传送门题目分析:似乎做过几道点分树的题之后题解还是比较好懂的。这位dalao的题目分析非常的到位,Orz。PoPoQQQ的具体解读也非常的清晰,Orz。Ri+Rj>=dist(i,j)→Ri−dist(i,k)>=dist(k,j)−RjR_i+R_j>=dist(i,j) \rarr R_i-dist(i,k)&g...原创 2019-03-24 13:40:42 · 250 阅读 · 0 评论 -
BZOJ 2759: 一个动态树好题 【LCT(节点维护线性方程)】
题目描述:题目传送门有N个未知数x[1…n]和N个等式组成的同余方程组:x[i]=k[i]∗x[p[i]]+b[i]mod10007x[i]=k[i]*x[p[i]]+b[i] mod 10007x[i]=k[i]∗x[p[i]]+b[i]mod10007其中,k[i],b[i],x[i]∈[0,10007)∩Z你要应付Q个事务,每个是两种情况之一:一.询问当前x[a]的解:A a无...原创 2019-03-22 17:37:50 · 190 阅读 · 0 评论 -
BZOJ 3658: Jabberwocky 【双向链表+树状数组】
题目描述:平面上有n个点,每个点有k种颜色中的一个。你可以选择一条水平的线段获得在其上方或其下方的所有点,如图所示:请求出你最多能够得到多少点,使得获得的点并不包含所有的颜色。n,k<=100000题目分析:不包含所有的颜色 →\rarr→ 保证一种颜色不选,其它任意考虑两个颜色相同的横坐标相邻的点(x0,y0)(x_0,y_0)(x0,y0)和(x1,y1)(x_1,y...原创 2019-03-22 10:58:22 · 282 阅读 · 0 评论 -
BZOJ 3514: Codechef MARCH14 GERALD07加强版 【LCT+主席树求图的连通块个数】
题目描述:题目传送门N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。n,m<=200000题目分析:图的连通块个数肿么求?按编号顺序依次加边。如果边iii加入的时候形成了环,那么把环中最先加入的边jjj找到,令pre[i]=jpre[i]=jpre[i]=j,并把jjj断掉。如果没有成环,那么pre[i]=0pre[i]=0pre[i]=0区间...原创 2019-03-22 08:18:05 · 485 阅读 · 0 评论 -
BZOJ 3217: ALOEXT 【块状链表套trie树】
题目分析:由于这位dalao实在讲的太好了,所以我就直接引用了。。由于此题需要强制在线的删除或者插入,所以我们基于块状链表分块,在每个块内存储指定区间内的所有数,以及该区间内的最大值和次大值,同时再维护一个由该区间内所有数组成的trie树。对于修改一个数,首先在该块的trie数中删除该数(直接伪删(减cnt)),然后再插入,接着更新最大值和次大值。对于插入一个数,直接在trie树...原创 2019-03-21 17:14:15 · 218 阅读 · 0 评论 -
BZOJ 3065: 带插入区间K小值 【替罪羊树套线段树】
题目分析:显然孤零零的线段树并不能支持插入之后的区间查询。那么就需要一个支持插入的平衡树来帮忙了。每个平衡树节点上开一个权值线段树,平衡树维护排名,线段树查询第K大但是又不能旋转,那就替罪羊树了。节点上的线段树是当前节点的值和儿子的线段树的合并(然而我写的线段树合并莫名TLE果然还是太菜了。。所以就改成暴力插入。。)查询的时候就从平衡树的根下去,根据线段树的权值个数来划分区间,把线段...原创 2019-03-21 12:05:05 · 203 阅读 · 0 评论