![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树套树
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj3196 Tyvj 1730 二逼平衡树(树套树,线段树套splay/bit套动态开点线段树)
线段树套splay,看网上题解大部分说套splay是过不去的,需要优越的姿势才可以,本想着过不去再卡一卡优越的姿势的,然而过了qaq。 线段树维护区间,对于线段树的每个节点我们吊一棵splay维护区间内的权值。 操作1:查询k在区间[l,r]上的排名。 线段树上查询区间,去splay上查询小于k的有多少个,都加起来即可,再加1就是k的排名。 操作2:查询区间[l,r]上的排名为k的数。 ...原创 2018-02-25 22:27:11 · 428 阅读 · 0 评论 -
bzoj4605 崂山白花蛇草水(动态开点线段树逃替罪羊重构K-D tree)
首先我们发现它是一个三维的问题而且还强制在线 囧 我们可以考虑在外面来一个权值线段树,然后每次查询时在线段树二分即可,这样我们每个节点再套一棵K-D tree,用来查询有多少个点被框住了,然后因为是不断往里插点,所以还要替罪羊式重构维护一下K-D tree。 最后复杂度就是O(qlogwn−−√)O(qlogwn)O(qlogw\sqrt n) #include <bits/stdc+...原创 2018-06-14 22:37:24 · 235 阅读 · 0 评论 -
bzoj4604 The kth maximum number(动态开点线段树逃替罪羊重构K-D tree)
是bzoj4605的弱化版。 可以离线,数据范围小一些,因此可以整体二分套cdq。 或者直接双倍经验(逃 #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 500010 #define alpha 0.77 inline char ...原创 2018-06-14 22:31:24 · 248 阅读 · 0 评论 -
bzoj4991 [Usaco2017 Feb]Why Did the Cow Cross the Road III(cdq分治/树套树)
恩,利用前两题的知识,我们化一化,发现是求一个二维的东西,果断树套树,线段树开不下gg,BIT+splay被卡常gg。试图优化T的更多gg 还是乖乖写cdq分治吧qaqCDQ分治原创 2018-04-24 15:16:07 · 276 阅读 · 0 评论 -
bzoj4889 [Tjoi2017]不勤劳的图书管理员(线段树套权值线段树)
相当于动态维护带权逆序对。 交换x,y位置的数,只会对他们之间的数产生影响。分类讨论即可。我写的线段树套权值线段树,卡空间,需要写垃圾回收qaq 复杂度O(nlog2n)O(nlog^2n)原创 2018-04-17 20:32:13 · 378 阅读 · 0 评论 -
bzoj4553 [Tjoi2016&Heoi2016]序列(dp+树状数组套splay)
处理出每个位置i的最大值c[i],最小值b[i],原来是a[i]。考虑倒着dp,那么i如果能接在j(j>i)之前,则需要满足: a[i]<=b[j]&&c[i]<=a[j]。我们就是要求满足这两个限制的点中最大的一个。可以直接树套树解决。 复杂度O(nlog2n)O(nlog2n)O(nlog^2n) #include <cstdio> #i...原创 2018-03-29 11:38:47 · 256 阅读 · 0 评论 -
bzoj3170 [Tjoi2013]松鼠聚会(转换坐标系)
分类讨论树套树了一波nlog2nnlog^2n大常数成功TLE。qaq 正解是转换坐标系。我们发现求得其实就是切比雪夫距离之和,也就是∑j=1nmax(|xi−xj|,|yi−yj|)\sum\limits_{j=1}^nmax(|x_i-x_j|,|y_i-y_j|)。而我们可以通过变换坐标系,(x,y)->(x+y,x-y),也即把坐标轴旋转45度,我们发现此时两点间的曼哈顿距离正好是原来切比原创 2018-03-19 13:30:59 · 326 阅读 · 0 评论 -
bzoj3065 带插入区间K小值(替罪羊树套动态开点线段树)
替罪羊树呢就是不用旋转的平衡树,那不旋转如何维持平衡呢?我们设定一个α\alpha值,每当一个点不满足大小平衡时我们就暴力重构那一部分。用平衡树维护区间位置,每个节点一棵权值线段树。查询的时候我们就把x~y区间搞出来(用一堆权值线段树和单点表示),然后类似主席树求第k小的去树上二分找一下即可。此题还要回收垃圾。。。因为内存不够!删除还有回收的时候记得传引用,因为你还要断掉他父亲和他的边。重构的时候只原创 2018-02-24 22:11:08 · 410 阅读 · 0 评论 -
bzoj3110 [Zjoi2013]K大数查询(权值线段树套线段树)
外面一棵线段树维护权值,每个节点一颗线段树维护区间,要动态加点。 1操作相当于在外层线段树上单点修改,内层线段树区间加法。 最好维护永久标记,不要pushdown。 2操作在外层线段树上二分爬,内层线段树求区间和。原创 2018-02-28 17:20:24 · 296 阅读 · 0 评论 -
bzoj3262 陌上花开(树状数组套splay/cdq分治)
求三维偏序,可以树套树,第一维排序解决,第二维树状数组,第三维splay 或者cdq分治解决,要注意处理相同权值,细节较多。 树状数组套splay #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; #...原创 2018-02-26 22:03:45 · 300 阅读 · 0 评论 -
bzoj1146 [CTSC2008]网络管理(树上主席树,树状数组套动态加点线段树)
给定一棵树,查询路径第k大值,带修改。 就是bzoj2588+bzoj3196 树上建主席树。然后对于修改,修改点x的权值,只会对x的子树有影响,而x的子树在dfs序上是连续的一段in[x],out[x],就相当于区间修改,我们利用差分+树状数组来维护,另建bit+动态加点线段树来维护。 树状数组套动态加点线段树内存究竟怎么算.jpg???能开多大是多大好了,反正是要比logn^2小很多?这样原创 2018-02-26 20:45:05 · 320 阅读 · 0 评论 -
bzoj2141 排队(树套树)
求动态逆序对,BIT套权值线段树即可。 空间和时间都是O((n+m)log2n)O((n+m)log2n)O((n+m)log^2n)的 最近怎么老是算错空间qaq #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 20010 in...原创 2018-06-15 09:21:01 · 192 阅读 · 0 评论