数据结构
文章平均质量分 73
qingdaobaibai
这个作者很懒,什么都没留下…
展开
-
【bzoj3295】 CQOI2011动态逆序对 树状数组+主席树
对于每一个位置我们处理出刚开始它左边比他大的数的个数,和它右边比它小的数的个数,然后每次删除就在主席树里修改,最后答案就要减去a1+a2-左边比他大的被删除了的数的个数-右边比他小的被删除了的数的个数。一开始傻逼了,还对整个序列建前缀主席树,还以为省空间,结果发现树状数组直接预处理就好了,最后在不断地RE过程中,艰难的A了,看来卡空间的题真是非常不爽呢。#include#incl原创 2015-08-06 17:26:04 · 849 阅读 · 0 评论 -
kd-tree小结
来省队集训被吊打,于是无聊学了一下kd-tree,挺好玩的东西。kd-tree是一种支持查询平面最近点(其实是k维,但这种题目比较少)的数据结构,单次理论时间复杂度O(√n),但实际是非常快的,可以说kd-tree就是一种比较优化的暴力。kd-tree的思想是将平面进行分割,第一次按第一维分割,第二次按第二维分割,然后接着按第一维分割,直至每个叶子节点只包含一个点,类似线段树的结构。查询时原创 2015-05-23 21:59:22 · 5068 阅读 · 2 评论 -
【bzoj3529】[Sdoi2014]数表 线性筛法+树状数组+莫比乌斯反演+数论分块
后面那一块暴力做出来就可以了,复杂度是O(n log n)的考虑a的限制,因为f(i)因为本题一共只有100000个左右的f(i),所以可以这么做。#include#include#include#include#include#include#define maxn 100010 using namespace std;struct yts{ int原创 2016-03-31 10:55:25 · 466 阅读 · 0 评论 -
【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
首先求出height数组,原式很明显可以化成一堆长度的和-两两LCP的和,所以我们考虑每个height能充当多少个区间的最小值即可,那么这个问题可以用单调栈解决,从左和从右各维护一个单调递增的单调栈,求出点i向左和向右分别最多能延伸多长。注意:1.height数组的[i,i]是要计入区间数的,因为我们查询lcp(i,j)的时候查询的是height数组中rank[i]+1~rank[j]的最原创 2015-12-06 19:01:52 · 597 阅读 · 0 评论 -
【bzoj2626】JZPFAR kd-tree
复习一下kd-tree模板,顺便学点新东西。#include#include#include#include#include#include#include#define maxn 100010 using namespace std;int cur;struct yts1{ long long dis; int id;};bool operato原创 2016-04-26 08:40:41 · 731 阅读 · 0 评论 -
【bzoj3531】[Sdoi2014]旅行 动态开点的线段树
动态开点的线段树开c棵线段树CC 对应删除一个节点,增加一个节点CW 对应修改一个节点QS 查询对应线段树中部分的和QM 查询对应线段树中部分的最大值所谓动态开点,就是每个节点用的时候再开,可以去掉许多无用的节点。总共O(nlogn)级别个节点#include#include#include#include#include#include#d原创 2016-04-13 09:35:43 · 2174 阅读 · 0 评论 -
【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树
权值线段树套区间线段树外层线段树按照完全二叉树的建法全部建出内层线段树动态开点外层的每个节点上都建一棵区间线段树,维护权值在[l,r]中每个区间出现的个数每次修改对应外层线段树上的O(log n)个节点,内层修改一个区间,对应内层线段树上的O(log n)个节点所以,一次修改会修改O(log^2 n)个节点#include#include#include#原创 2016-04-13 10:39:09 · 730 阅读 · 1 评论 -
【bzoj3307】雨天的尾巴 线段树+树链剖分
考虑如果在序列上的话,每次只需要在区间左端点+1,右端点-1,最后用线段树一起统计即可。在树上的话,就用树链剖分转换成序列,每一次操作,对应修改O(log n)条重链上的标记,最后用线段树来统计。#include#include#include#include#include#include#include#include#define maxn 200100u原创 2016-04-14 09:12:58 · 917 阅读 · 0 评论 -
【bzoj1901】Zju2112 Dynamic Rankings 线段树套平衡树
每个节点建一棵平衡树,结点个数为O(r-l+1),每一层结点个数为O(n),总结点个数为O(n log n)对于Q操作:二分答案,转化为区间[l,r]中小于等于ans的数有多少个,若>=k,则答案左移,否则答案右移区间[l,r]对应线段树上O(log n)个节点,在每个节点的平衡树中进行查询,每次查询的复杂度是O(log n)总复杂度O(log^3 n)对于C操作:对应修改原创 2016-04-15 10:31:50 · 448 阅读 · 0 评论 -
【bzoj1018】 堵塞的交通 线段树维护连通性
真是道神题,想写了一个月终于今天晚上把它解决了。想一下也真心不容易。我们用线段树维护这样几个量。(懒得画了,原谅我盗图。。。)我们用线段树维护这六个量,然后用一个数组a[x][0][0]表示第1行x位置与x+1位置的连通性,a[x][1][0]表示第二行x位置和x+1位置的连通性,a[x][0][1]表示第一行x位置与第二行x位置的连通性。线段树的合并和查询写的比较巧妙,具体细节可以参原创 2015-07-12 21:44:47 · 1563 阅读 · 2 评论 -
【bzoj4034】 HAOI2015 T2 树链剖分+小变形
这道题其实是个裸裸的树剖,重点在于怎样处理子树加操作,那么我们在建seq序列时,想办法把一颗子树建的连续起来就好了,那么我们就改变以往的顺序,利用dfs,先跑重链,在跑轻链,这样就把子树建到一起了,然后就非常简单了。话说,这道题跟NOI2015D1T2有什么区别么?#include#include#include#include#include#include#define原创 2015-07-18 19:16:38 · 463 阅读 · 0 评论 -
【bzoj3772】 精神污染 dfs序+主席树
PoPoQQQ的题解太神了,表示看了好久才看懂,于是自己写了一份题解祸害人类。 首先有一个结论对于一条路径x-->y,如果它的两个端点x和y都在另一条路径上,则这条路径被另一条路径包含。 那么问题转化为了对于一条路径,判断两个端点都在这条路径上的路径有多少条。 那么对于每一个节点x,我们用一个vector来存节点y,当且仅当存在一条路径x-->y。 我们说主原创 2015-08-06 15:56:27 · 1586 阅读 · 0 评论 -
主席树小结
简直卧槽了,充满RE的一天,没有太完成目标,算上昨天刷的一道主席树一共五道,算是入门了吧。主席树可以认为是一种前缀和,表示的是每一个数出现的次数(当然必须要离散化),一种类似线段树的建法,为了节省空间就跟可持久化线段树一样了,这样一开始建出一个空树,每次就相当于在上一棵树的基础上进行修改,空间就是O(n log n)的了(还是很大呀!!!),写法跟前缀和非常像。这样我们在查询区间【l,r】原创 2015-08-05 23:43:32 · 3678 阅读 · 0 评论 -
【bzoj1098】 POI2007 办公楼biu dfs+优化
这道题第一思路是建反图,然后看反图的联通块个数,但是很明显反图太大了,不能直接建出来。那么有两个优化,第一个优化是我们每次建边时先把边排一遍序,然后按顺序建边,每次找的时候按顺序找,第二个优化是用并查集来加速,当访问过x时,就把x指向x+1,这样每次可以直接访问下一个没有访问的点。#include#include#include#include#include#include原创 2015-07-30 16:04:46 · 1291 阅读 · 0 评论 -
【bzoj3300】 USACO2011Best Parenthesis 暴力+树状数组
貌似这道题暴力递归就可以了,可能是我想麻烦了吧,先用栈找出每个括号与之匹配的括号,然后对于括号对按照括号对的长度排序,从小的开始统计后加入树状数组,就没有了。#include#include#include#include#include#include#define mod 12345678910#define maxn 200010using namespace原创 2015-07-25 15:56:30 · 584 阅读 · 0 评论 -
【bzoj1537】 POI2005 Aut- The Bus 离散化+树状数组优化DP
用一下刚学的树状数组优化,以后可以有东西装逼了,这道题一开始没有意识到这种dp,很少做这种排序后dp的题,不过,第一遍把k打成了n,RE了一遍。#include#include#include#include#include#include#include#define maxn 100010#define inf 1000000000000000using nam原创 2015-07-21 21:23:10 · 626 阅读 · 0 评论 -
【bzoj3790】 神奇项链 mancher+树状数组优化dp
这道题首先用manacher求出回文子串长度,之后问题就转化为已知一堆线段,要用最少的线段,覆盖整个区间,很明显可以用dp来做,f[i]表示1到i这个区间最少用多少线段覆盖,f[i]=min{f[j]} (r[j]http://hzwer.com/5488.html#include#include#include#include#include#include#defi原创 2015-07-21 15:02:19 · 812 阅读 · 0 评论 -
【bzoj2342】 SHOI2011 双倍回文 manacher+set
学习了一下manacher,这个算法是用来求字符串中以每一项为对称轴的最长回文子串长度的。放一下链接:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/大概用的一个思想就是利用对称,考虑当前覆盖到的最右端(假设为id+p[id]),那么我们可以利用对称性,前面的子串是已经求过的,i的回文子串长度就至少为i关于id对称点的最长原创 2015-07-21 10:48:37 · 1116 阅读 · 0 评论 -
【bzoj3687】 简单题 bitset
用这道题学一下bitset,感觉没什么大用处其实就相当于一个布尔数组,可以快速左移右移,再就没大有别的用处了吧,不明觉厉。这道题f[i]表示和为i的集合个数为奇数还是偶数,f#include#include#include#include#include#include#include#define maxn 2000010using namespace std;原创 2015-07-18 19:49:26 · 1801 阅读 · 0 评论 -
【bzoj3702】二叉树 权值线段树
神奇的解法对于每个节点,建出权值线段树每次查询右子树的权值线段树和左子树的权值线段树,左子树中比右子树小的有多少?右子树比左子树小的有多少?(分别对应不交换的逆序对和交换的逆序对)将左子树和右子树的权值线段树合并递归进行这个操作感觉复杂度很不靠谱,于是想证明一下复杂度最开始权值线段树共O(nlogn)个节点,最后共O(n)个节点每次合并两棵树的每个节点都要访问一遍,所以原创 2016-05-11 10:15:33 · 1886 阅读 · 0 评论 -
【bzoj3196】Tyvj 1730 二逼平衡树 树套树
树套树裸题了,但是splay真心常数大呀。#include#include#include#include#include#include#define maxn 50010#define N 2000010#define inf 1000000000using namespace std;struct yts{ int l,r; int root;}t原创 2016-04-16 15:09:04 · 593 阅读 · 0 评论 -
【bzoj3237】[Ahoi2013]连通图 cdq分治+并查集
cdq分治首先把所有没有影响的边都建出来分治过程:1、把左边没有右边有的边建出来2、分治左边3、把并查集恢复至初始的样子4、把右边没有左边有的边建出来5、分治右边每次建的边数为这个区间内的集合中的边数,是一个与n无关的量,所以复杂度是正确的O(qclogqc)如何将并查集恢复至初始的样子?每当一个点的父亲被修改时,将它和它的父亲入栈,每次只需要记录一下当原创 2016-05-11 18:59:59 · 1393 阅读 · 0 评论 -
【bzoj4569】[Scoi2016]萌萌哒 倍增+并查集
确实挺有意思的,暴力就是并查集直接缩,O(nm)如何快速维护区间是否对应相同?倍增!!!f[i][j]表示i开始的2^j个字符与谁对应相同,若f[i][j]=k,则从i开始的2^j个字符与从k开始的2^j个字符对应相同利用RMQ的思想,每次合并对应两段区间的合并,每次合并f[i][j]和f[k][j]时,把f[i][j-1]与f[k][j-1]、f[i+(1这个思路非常的有趣,没有原创 2016-05-20 21:53:35 · 1511 阅读 · 1 评论 -
2016百度之星 - 初赛(Astar Round2A)题解
作为线下选手,非常不要脸的写一份题解……A、hdu5690题意:求m个x组成的数模k是否等于cm题解:两种做法,第一种,裸的矩阵乘法,构造矩阵{f(x,i),x}*{10 0}={f(x,i+1),x} {1 1}复杂度O(Tlog m)#include#include#include#include#include#i原创 2016-05-21 22:29:03 · 1815 阅读 · 2 评论 -
【bzoj4262】Sum 线段树+单调队列
看了晨神的题解,确实很厉害呀http://blog.csdn.net/heheda_is_an_oier/article/details/51199299这道题利用了数据随机的性质,单调队列中期望O(log n)个元素,这就非常有趣了。我们把每个询问拆成两个,这样可以做差,右端点每往后移一个位置,对应加入一遍所有的答案,因为单调队列中有logn个元素,所以一共有logn中不同的答案原创 2016-06-10 10:05:27 · 741 阅读 · 0 评论 -
【bzoj3624】[Apio2008]免费道路 贪心+并查集
特殊边加完后,剩下的联通块越少,使用的普通边越少。考虑特殊边如何加?首先,把特殊边中必须加的边加入,如果必须加的边数>k或者原图不连通,则无解。之后,把特殊边能加则加,即不形成环就加入,直到加入k条。若都加完后还不够k条,则把剩下的边随便加。最后,把非特殊边能加则加。上课的时候,没有想到要处理必经边的问题。算是一道不错的题。#include#include原创 2016-05-23 19:41:14 · 830 阅读 · 0 评论 -
【bzoj2809】[Apio2012]dispatching 主席树+dfs序
这分明就是一道主席树傻逼题呀,在dfs序上建出主席树,每次在主席树上二分就可以了。#include#include#include#include#include#include#define maxn 101000#define inf 1000000000#define N 3400000using namespace std;int head[maxn],原创 2016-05-23 20:46:05 · 648 阅读 · 0 评论 -
【bzoj3938】Robot 超哥线段树
都说了是水题!!!离线,离散化每个时刻,对应插入直线插入O(nlog^2n),询问O(m log n)#include#include#include#include#include#include#define maxn 100010#define N 600010using namespace std;struct yts{ int op,id;原创 2016-07-09 21:11:39 · 1355 阅读 · 0 评论 -
【bzoj2500】幸福的道路 单调队列+树形dp
重要的事情说三遍我是傻逼!!!我是傻逼!!!我是傻逼!!!把%d打成了%lld一直WA题意坑爹,求从i出发的最长链的长度a[i],求最长的一段a[i],满足最大值-最小值第一问,树形dp解决第二问,单调队列解决#include#include#include#include#include#include#include#define ma原创 2016-07-07 19:42:04 · 935 阅读 · 0 评论 -
【bzoj1568】[JSOI2008]Blue Mary开公司 超哥线段树
标记永久化的应用维护若干个一次函数在每个端点的最大值首先将端点离散化(本题不需要),线段树的每个区间维护的标记代表着覆盖这个区间的一条线段每次下放标记,利用标记永久化的思想,修改对应的区间标记若当前线段完全高于标记线段,则将当前线段进行标记若当前线段完全低于标记线段,则将当前线段扔掉若当前线段与标记线段有交点,考虑在上面的一部分是一个两条线段形成的分段函数,将长的线段作为当原创 2016-07-09 11:28:21 · 2280 阅读 · 2 评论 -
【bzoj4571】[Scoi2016]美味 主席树
只能想出个大概没有加法是主席树有了加法对应的就是主席树上一个区间而不是一个儿子了查询的时候,并不是在主席树上查询,而只是一种线段树式的查询如果+x后[l,mid]或[mid+1,r]有数,则往对应方向走查询[l,mid]和[mid+1,r]就在主席树上查询左儿子[l,mid]对应了区间[l-x,mid-x]右儿子[mid+1,r]对应了区间[mid+1-x,r-x]原创 2016-05-20 11:02:28 · 1348 阅读 · 0 评论 -
【bzoj4568】[Scoi2016]幸运数字 线性基+树链剖分
什么鬼东西呀?就是把两个线性基合并的过程放在线段树上,倍增可做,反正我写的树剖,听说学校里某人在某次考试的考场上的O(nlogn)算法被O(nlog^2n)的树剖秒成渣了。异或没打括号,调了好久。#include#include#include#include#include#include#define maxn 20010using namespace st原创 2016-05-20 08:07:50 · 1301 阅读 · 0 评论 -
【bzoj3563】DZY Loves Chinese 在线cdq分治+并查集
和3237做法差不多,把cdq分治改成在线的就可以了。至于怎么在线cdq分治?这个只可意会,不可言传。#include#include#include#include#include#include#define maxn 500010using namespace std;struct yts{ int x,y; bool flag;}e[maxn];原创 2016-05-11 20:12:51 · 1396 阅读 · 0 评论 -
【bzoj1370】[Baltic2003]Gang团伙 并查集
这可能是我最后几天在机房写题了,希望各位队爷NOI能那个好成绩吧。每个点拆成两个点,每一条边,如果是朋友则直接连边,如果是仇人,则从x向y+n连一条有向边,从y向x+n连一条有向边,这样所有视y为敌人的人就属于同一个集合了。#include#include#include#include#include#include#define maxn 2010int f[m原创 2016-05-16 17:56:10 · 1042 阅读 · 1 评论 -
【bzoj4597】[Shoi2016]随机序列 线段树
像我这种在SDOI考场上连普及组难度的题都A不掉的人活该滚粗,能解决问题的方法那么多,为什么我非要写 那个最慢的高精度?用自己水的一比的极限数据测了一下,就自信的交了?不要被什么乱七八糟的求和给吓到了,实际上一加一减全抵消了,因为第一个数的符号永远为+,所以剩下的都是跟第一个数有关的,即前缀乘积。sum[i]=a[1]*a[2]*……*a[i],考虑sum[i]对答案的贡献,sum[i]后原创 2016-05-16 19:05:32 · 1287 阅读 · 0 评论 -
【bzoj4070】[Apio2015]雅加达的摩天楼 分块+最短路
我们发现每次加入的边模p的余数是相同的,很容易想到对p分块当p>sqrt(n)时,最多会连出O(sqrt(n))条边,直接连边即可当p把图分成sqrt(n)+1层,最底层表示原来的节点从下往上依次表示p=1、2、3……时的节点对于每个p,把模p的余数相同的点顺次连接对于每个读入的p,从最底层向对应的第p层的节点连一条权值为0的边即可据说spfa快?还算是道不错的题原创 2016-05-06 13:48:12 · 1121 阅读 · 0 评论 -
【bzoj3261】最大异或和 主席树
有人管这个叫可持久化trie?好吧,我只会主席树。只要知道trie的贪心算法,这道题就可以随便做了。注意,求前缀和的时候,要加入一个0表示最开始的前缀和。#include#include#include#include#include#include#define maxn 600010#define N maxn*27using namespace std;原创 2016-05-18 18:01:49 · 1357 阅读 · 2 评论 -
【bzoj4592】[Shoi2015]脑洞治疗仪 线段树
我还真是傻逼呀,这么傻逼的线段树调那么久。就是一个1操作,改成在线段树上二分即可。#include#include#include#include#include#include#define maxn 200010using namespace std;struct yts{ int l,r; int lmx,rmx,ans,size,tag;}t[4原创 2016-05-18 20:54:59 · 1375 阅读 · 0 评论 -
【bzoj4530】[Bjoi2014]大融合 并查集+线段树合并
线段树合并好神啊,表示我这种傻逼只能想到树剖O(nlog^2n)做法先把原树建出来,每次查询就等价于计算子节点的size*(父亲节点所在联通块的大小-子节点的size)用并查集找到节点的祖先,维护子树size这个东西可以用线段树合并来做,查询就是查询dfs序上的一段区间好像LCT+启发式合并更快?#include#include#include#include原创 2016-05-18 21:47:42 · 1949 阅读 · 0 评论 -
【bzoj4017】小Q的无敌异或 树状数组
按位考虑第一个问题,一堆0和1,求所有区间的异或的和从前往后枚举,记录当前有多少个0,多少个1,随便一算就可以第二个问题,一堆0和1,求所有区间的和的异或所有大于第i位的部分我们都可以省略,于是等价于把每个数%2^(i+1)从前往后枚举,如果两个数的差模意义下大于等于2^i,则第i位为1,于是写一个权值线段树或者离散化+树状数组即可,酸爽虽然看上去挺简单,但还是调了很久原创 2016-05-19 09:41:56 · 1696 阅读 · 1 评论