
树套树
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
bzoj 3065 带插入区间K小值 重量平衡treap套主席树
题意:维护一个数列,支持插入,修改,查询区间k小值。我数据结构还是太弱呀QAQ 看了myy的课件和vfk的题解treap支持重量平衡,也就是他插入删除影响的节点数都是O(log)O(log) 的。先说插入,我们先把点插入到最下面,然后往上旋,假设这个点转到祖先k的位置,那么影响节点为sizeksize_k 个,由于这个点的随机权值是sizeksize_k 个点中最小的,这个的概率是1sizek\f原创 2016-08-29 20:05:58 · 781 阅读 · 1 评论 -
bzoj 1513 树套树
题意:每次把坐标系上的一个矩形内的权值修改成矩形内最大权值+w。求最后最大权值。二维线段树,但外层数据结构既不能pushup(总不能重构内层树吧?),也不能pushdown(两个标记不能相加)。我草,那怎么办?标记永久化,打两种标记,第一种标记对经过的每一个点一路打下来,查询时精确查找。第二种标记恰好相反。那么对于查找的区间在标记区间之上的情况会查到第一种标记,在标记之下的情况会查到第二种标记。话说原创 2016-09-10 15:23:49 · 418 阅读 · 0 评论 -
bzoj 3833 [Poi2014]Solar lamps 树套树 splay
首先由于所有灯的角度都是一样的,所以可以用坐标转换把一个点和点的覆盖区域转成平面直角坐标系里的点和一个点右上的区域。 然后这个问题可以转化为平面上一坨点,设一个点的答案为ans,求一个点左下的点中ans第k小的值。 树套树+二分? 这题nlog2nlog^2 都卡得要死你TM跟我讲这个?由于求的东西天生离线所以我们可以排序消掉一维坐标。 然后就是带修求前缀第k大。 树状数组套主席树? 这原创 2016-09-27 17:23:28 · 467 阅读 · 0 评论 -
bzoj 3217 ALOEXT 替罪羊树套trie树
感觉又刚了一遍带插入区间k小值。。。 这题写个替罪羊练一下。其实应该可以用重量平衡的treap套trie。带插入维护一段区间的trie和次小值。 区间次小值随便维护,区间trie呢? 我会做!替罪羊套trie! 不过写到一半你会发现这题还有删除。treap删点直接旋到下面删。那替罪羊怎么删? 直接重构?每次删中间的点就挂了。 打标记? 似乎会有很多特判。 只要像线段树一样建就好了。把所原创 2016-10-26 09:44:08 · 889 阅读 · 0 评论 -
bzoj 3489 A simple rmq problem 可持久化树套树
设在位置x的数的前驱为pre[x],后继为nex[x] 只出现一次的数满足条件pre[x]#include <bits/stdc++.h> using namespace std; #define N 110000 #define M1 2100000 #define M2 36000000 int n,m,v1,v2,ans,lq,rq; int a[N],pre[N],nex[N],pos[N原创 2016-10-27 13:46:20 · 267 阅读 · 0 评论 -
bzoj 2141 线段树套权值线段树
首先交换的两个数两边的数产生的逆序对数不变。那么只需要考虑中间的数和两个数本身。只考虑第一个数大于第二个数的情况(小于的情况是这个的逆过程)首先答案-1(这两个数产生的逆序对)答案-位置在两个数之间并且值也在两个数之间的数的个数×2答案-位置在两个数之间并且值与两个数中的一个相等的数的个数可以用树套树维护这个东西。#include <bits/stdc++.h> using namespace st原创 2016-10-19 14:37:10 · 319 阅读 · 0 评论 -
bzoj 3932 [CQOI2015]任务查询系统 可持久化二维线段树
好好的一道主席树被我强行套了一层。。。 然后MLE+TLE,然后我惊奇地发现区间的sum只要开int就行了。。。我的做法: 一个点需要满足si<=x且ei>=x,然后求满足这个条件的pi前k小的点的和。 那么对si排一遍序,把所有点按ei第一维,pi第二维插入可持久化二维线段树。。。。正常的做法: 对于一个点,在si时+1,ti+1时-1,然后按这个建主席树。#include <bits/s原创 2016-10-29 16:34:47 · 395 阅读 · 0 评论 -
bzoj 2120&&2453 线段树套权值线段树
这题只有我写了树套树吗? 记录一个点的颜色下一个出现的位置nex。 那么查询一段区间颜色个数相当于查询这段区间中nex大于右端点的数的个数。这个东西用普通线段树套权值线段树维护一下。 对于修改由于不超过1000次,因此只需要扫一遍要改的颜色然后找到位置修改一下nex就行了。#include <bits/stdc++.h> using namespace std; #define N 11000原创 2016-10-19 13:31:07 · 253 阅读 · 0 评论 -
bzoj 4009 [HNOI2015]接水果 树套树
考虑满足什么条件的水果(x1,y1)会落在指定盘子(x2,y2)上:如果x2,y2为祖先孩子关系,设x2是y2的祖先,t是x2到y2路径上第二个点那么x1,y1一定满足x1在y2子树中,y1在x2子树外。 在子树中可以表示为dfs序中一段,在子树外可以表示为两段。否则x1一定在x2子树中,y1一定在y2子树中。这样问题就转化成平面上一些矩形,每个矩形有权值,一些询问,求包含一个点的权值第k小的矩形原创 2016-10-31 19:33:26 · 788 阅读 · 0 评论