视频课 数据结构 题解乱写

上午基本没收获。。。原题多,剩下的题太难。赶上上午网不好听一阵掉一阵。。。

1,维护$BST$支持插入,查询最大/小值的深度并单旋至根,或者在查询并旋转操作后将其删除。$q \le 10^5,v \le 10^9$

让你模拟数据结构的题肯定不是模拟了,而是在让你发现这个数据结构的性质。

我们发现进行旋转操作的只有极值。以最小值为例。

最小值一定是最靠左的点,旋到根后一定没有左儿子。而右儿子则是原来的根。

最小值原父亲的左儿子变成了最小值原来的右儿子,其余结构均不变。

我们要维护的是深度,而实际上这个操作就是整棵树除了某棵子树外全部+1,最小值深度变为1。

于是用一个真的平衡树来维护,维护的信息是在原树里的左右儿子,深度,父亲,以及权值。

我们插入一个新节点的话,二分查找插入位置。

删除节点也简单,你已经转到根了所以直接剩下节点深度-1就好了。

2,给定串,若有长为$L$的平方串则其对应位置分别连$w_L$的边。求最小生成树。$n \le 3 \times 10^5$

先把$w$排序。从小到达考虑。

对于枚举到的$L$。用哨兵节点的方法求出平方串,然后倍增并查集连边。

递归下去,如果发现低一级的两个并查集已联通则直接返回否则就递归下去。

这样递归的条件是至少有一条边没有连,所以每次递归$log$层一定会连至少一条边。

生成树只有$n-1$条边所以复杂度是正确的。

3,树,每个点颜色互不相同。支持将某个点至根路径所有点染成同一种未出现颜色,求路径颜色数,求子树内到根路径上颜色数最多的点。$n,q \le 10^5$

考虑维护一个数组表示每个点到根路径上的颜色数。

根据这个数组就可以求出两个询问的答案了,第二个询问特判一下$lca$周围的边即可。

将两个点颜色相同的边变为重边,否则为轻边,则第一个操作是$access$

再开一棵线段树,操作就是线段树的区间加减了。

$access$的期望转化次数是$log$的。所以总复杂度是$O(n \ log^2 \ n)$

据此可知其实边的转化次数之多也就是$q \ log \ n$。所以直接用树剖维护也是可以的。

4,(loj2135)树边点带权,支持修改点权,查询$min_x ( \sum\limits_{v=1}^{n} dis(u,v) \ties w_v )$。$n,q \le 10^5$。点的度数$\le 20$

据说是动态点分治的模板题???完全不会。

求的这个东西类似于重心的东西,所以决策点可以贪心移动。

但是深度有多大是不知道的,所以直接暴力来不对。

如果在点分树上来的话深度就只有$log$了。

求出每个点到其各级分治祖先的距离,容斥计算答案。

维护各种距离和链贡献都是点分治的经典操作。

修改时修改各级分治祖先,暴跳并去掉原来贡献加入新贡献即可。

每次询问时从根节点开始走,往不超过$20$个子树方向分别试探能否更新答案,如果能就走过去,否则就停下。

试探指的是向下一级分治重心的方向走一条原树边,而不是走直接走到点分治中心。

根据重心转移维护子树权和之后可以不必枚举每个儿子而只需要权和大于整棵树一半的那个儿子。

对于每个点求解答案所需要的是跳点分树祖先,一共$O(log)$次所以复杂度是$O(log)$的。(需要$O(1)lca$)

这样就可以保证正确性。同时时间复杂度是$O(q \ log^2 \ n )$的。

更暴力但是可以过的方法是,维护变量$cnt_u$表示点分治子树的点权和,$sum_u$表示$u$的点分治子树中的$w_v \times dis(u,v)$之和。

而$sub_u$表示$u$的点分治子树中$w_v \times dif(v,f_u)$的和,其中$f$是点分树父亲。修改很好说,这些变量都可以暴力修改,是$O(q \ log \ n)$的。

走的时候可以利用这个变量。不加优化的话沿着$20$个方向走。复杂度是$O(20qlog^2n)$也是可过的。

5,(bzoj2959)无向图。支持加边,修改点权,查询在边任意定向后两点路径能经过的节点集合(不重复)的最大权值和。$n \le 1.5 \times 10^5,q \le 5n$

这个套路的题倒是做过一些。不难发现题意就是缩掉边双之后的树上路径和。但是加边有点问题。

所以缩点建树之后。查询即为链上和。其中边双的权值就是其含有的所有点的权和。

问题就在于连边。

如果连的边已经在一个边双中,无视。

如果连的边所连接的两个边双尚未联通,则直接树上连边。

这两个操作可以直接用并查集判断。

否则,提取出链,然后把它们压成一个点。

用$lct$维护。但是缩点的时候要把所有出边重新建。启发式合并可以。

然而事实上我们在$lct$操作时,每次操作节点的时候用并查集看一下边双。

假装啥也没有发生,欺骗$lct$。就可以了。。。

6,椎:https://www.cnblogs.com/hzoi-DeepinC/p/11747122.html

7,给定两长为$n$的数列$a,b$。每次询问给定$l,r,L,R$求$\max\limits_{L \le i \le R} \{ \sum\limits_{l \le j \le r,b_j=i} a_j \}$

开桶维护权值出现次数的权值和。回滚莫队。

8,(loj2472)给定长度为$n$的数列,要求找到字典序最大的排列满足$d_i \geq d_{\frac{i}{k}}$。$n,k \le 5 \times 10^5$

先鸽了。

猜你喜欢

转载自www.cnblogs.com/hzoi-DeepinC/p/12297189.html
今日推荐