数据结构
文章平均质量分 70
pbihao
这个作者很懒,什么都没留下…
展开
-
【BZOJ 3594】[Scoi2014]方伯伯的玉米田 树状数组
显然,要拔i,那么拔i->n一起一定不会更差(后面的相对高度不变,但是比前面的高度高的可能性更大),所以,就变得水水的了。设f[i][j]为高度为i,被拔过j次的最长不下降子序列,然后用二维数组维护 就可以了。值得一提的是,不要把拔0次,即不拔的情况考虑掉了,我还因此wa了几发。。。郁闷#include#include#includeusing namespace std;in原创 2017-02-24 10:49:49 · 245 阅读 · 0 评论 -
【poj 1741】tree 树的点分治
【poj 1741】tree 树的点分治原创 2016-09-20 17:03:08 · 254 阅读 · 0 评论 -
【BZOJ 3732】Network kruskal树
今天听同学介绍的,就把这道题写了,还有去做了BZOJ3551也会用到,不过会套一个主席树。kruskal树(应该就叫这个名字吧,叫错了也不怪我qwq),思想就是把边权转化成点权,每一次连边的时候就新建一个虚拟节点,然后像原来的两个节点的根节点连边,点权就是连接两边的边的边权,然后他具有很多有趣而显然的性质,例如真实节点是叶子节点,点权沿链向上递增等等可以自己去发掘,这道题就是先建立一个最小生成原创 2017-01-03 08:53:08 · 203 阅读 · 0 评论 -
【BZOJ 2653】middle 主席树好题推荐
谈谈这一道题的最强烈的感受在于,我的主席树入门是经典题目区间第k大树查询(当然,因为poj上不会强制在线,还用树套树和整体二分写过那道题),因此,对于主席树的理解仅仅是一个区间历史版本维护的理解,即类似于树套树的外层区间树内层全值树。但是忽略了主席树的真正伟大之处在于可持久化,而可持久化的也能是权值。对于这一道题,由于我们不知道中位数是多少,因此考虑二分,而关键之处在于如何二分cheak,可以原创 2016-12-25 21:36:18 · 548 阅读 · 0 评论 -
【BZOJ 3932】[CQOI2015]任务查询系统 主席树
好像真的没什么好说的,主席树维护一个差分就好了。#include#include#include#include#define maxn 100020#define LL long long#define find(a) (lower_bound(cur+1,cur+1+cnt,(a))-cur)using namespace std;LL n,m,rt[maxn*10],cu原创 2016-12-09 22:02:04 · 297 阅读 · 0 评论 -
【BZOJ 3110】 [Zjoi2013]K大数查询 整体二分+树状数组区间修改
额,只能说整体二分是一个很神奇的东西,首先既然是二分虽然加了一个整体听起来变得立马高大上起来,但是还是需要从最基本的二分思路出发才能理解。首先如果对于只有一次地查询操作的话我们很容易就可以想到二分的写法,二分权值然后加上cheak操作判断比当前大的值有多少个,然后不断缩小二分的区间直到最后l==r。类似的,在整体二分我们同样用到类似的思想,这里简单模拟一下操作过程,希望能帮组大家理解;首先用一原创 2016-12-07 19:52:17 · 1277 阅读 · 1 评论 -
【洛谷】线段树 树状数组区间修改区间查询
在做一道整体二分的题目的时候遇到了这种区间修改区间查询的树状数组,感觉用起来手感不错就拿来了。证明的话,那其实不重要,会用就好了#include#include#include#define maxn 500000#define LL unsigned long longusing namespace std;int n,m;LL a[maxn],sum[maxn],c1[max原创 2016-12-06 22:10:45 · 822 阅读 · 0 评论 -
【BZOJ 2733】[HNOI2012]永无乡 启发式合并treap
大白上在介绍treap的时候有一道相似的例题,不过难一点的是他是拆桥,所以类似于银河星球大战里面的离线处理,倒着来,先拆开再合并。思路嘛,很简单,启发式合并treap。#include#include#include#includeusing namespace std;int n,m,fa[200020];int find(int x){return fa[x]==x?x:f原创 2016-12-20 17:13:31 · 280 阅读 · 0 评论 -
【BZOJ 1014】[JSOI2008]火星人prefix hash+splay+二分
一开始以为会是后缀数组之类的什么鬼东西,结果最后想了半天没想出来,结果想到hash秒出答案,所以有的时候应该考虑换一下思维方式。因为题目要求查询和修改操作,维护一个splay,每个节点对应这个位置的字符和这棵子树的hash值,就能完成插入修改操作了,每一个询问的时候再二分最长前缀hash cheak就好了然后。。。有一个函数忘了写return值结果BZOJ一直说我T,我改了很多常数还是T,原创 2016-12-20 10:29:57 · 205 阅读 · 0 评论 -
【BZOJ 2060】[BeiJing2011]元素 线性基
根据线性基的性质保证我们的任意序列构造的之间相互异或都不为0,所以贪心的来建,按照magic从大到小排序,然后从大到小构造线性基,对于每个加入线性基的元素对答案造成贡献#include#include#include#include#define LL long longusing namespace std;int n,ins[65];LL ans;struct node{原创 2016-12-19 12:09:23 · 308 阅读 · 0 评论 -
【BZOJ 1067】[SCOI2007]降雨量 线段树
裸的线段树或者rmq,反正没有修改,就是居然会有给没有出现过的年份的情况,wa了一发#include#include#include#include#define maxn 50021#define ls u<<1,l,mid#define rs u<<1|1,mid+1,r#define inf 0x3fffffffusing namespace std;int n,m,t原创 2017-02-23 09:56:14 · 302 阅读 · 0 评论 -
【codevs 1743】反转卡片 splay的应用
【codevs 1743】反转卡片 splay的应用原创 2016-07-27 10:39:56 · 301 阅读 · 0 评论 -
【bzoj 1588】 [HNOI2002]营业额统计 双向链表
【bzoj 1588】 [HNOI2002]营业额统计 双向链表原创 2016-10-16 17:56:14 · 1429 阅读 · 0 评论 -
【BZOJ 1208】 [HNOI2004]宠物收养所 splay模板(指针)+set
这一道题,出题就为了强行掩饰这是一道裸的平衡树硬生生装题面。裸的平衡树,找前缀后缀就可以了,但是数据太水了,我的手撕splay居然和stl的set速度只是快了一点,我不服set版:#include#include#include#define Mod 1000000#includeusing namespace std;int n,pos,ans;sets;原创 2016-11-03 08:35:35 · 322 阅读 · 0 评论 -
【BZOJ 1503】[NOI2004]郁闷的出纳员 treap
做完这一道题以后我基本就郁闷了,BZOJ上不能用ctime一直re,删了就好了,没什么好说的裸的treap拿来练版#include#include#include#includeusing namespace std;int n,Min; struct Tree{ int r,size,x,times; Tree* ch[2]; Tree(int a=0,int b=0,Tr原创 2016-12-07 20:57:49 · 256 阅读 · 0 评论 -
【BZOJ 1691】[Usaco2007 Dec]挑剔的美食家 treap+贪心
首先对于所有的奶牛和草堆按照鲜嫩度排序,这样倒着枚举奶牛,动态插入所有大于等于当前美味度的草堆,这样在treap中维护的所有的节点都是合法的,然后就可以贪心的去找后继了。贪心的证明比较简单就不说了BZOJ上不能使用ctime函数库,但是不初始化种子的话特别容易挂,所以随便相乘取一下质数的mod就好了#include#include#include#include#define LL原创 2016-12-12 18:07:17 · 303 阅读 · 0 评论 -
【BZOJ 1861】[Zjoi2006]Book 书架 splay
建立一个splay维护书架的信息,开一个数组标记每一个编号对应的节点的指针就好了,没什么好说的#include#include#includeusing namespace std;int n,m;struct Tree{ int x,size; Tree* ch[2],*f; Tree(int a=0,Tree* e=NULL){ x=a,size=1,ch[0]=NUL原创 2016-12-15 22:05:41 · 200 阅读 · 0 评论 -
【BZOJ 1031】 [JSOI2007]字符加密Cipher 后缀数组sa数组
第一道后缀数组的题目,思想很简单,首先断环为链,然后利用sa数组的排序功能排序这2*n个后缀最后直接输出就好了。我的版是刘汝佳先生大白上面的,并且附上自己的理解#include#include#include#define maxn 200010 using namespace std;char s[maxn];int t1[maxn],t2[maxn],c[maxn],sa[ma原创 2016-12-08 20:27:31 · 275 阅读 · 0 评论 -
【洛谷2680】【BZOJ 4326】运输计划 lca+差分
某学长:这题啊,树剖啊,裸的,结果当我写了100+树剖,猛然发现,好像这个树剖除了求lca就没有任何卵用了,so,为毛不用倍增,不过还是有用,洛谷上时限卡的紧,倍增求lca根本不行,T的不要不要的,好在现在管理员把时限改过来了,可以放心使用了思路嘛,就是二分答案,然后找出所有比二分出答案大的边,那么这些边一定是需要改进的对吧,也就是说需要改进的拿一条边一定是这些路径的一个交集,所以差分记录每一原创 2016-11-01 21:28:13 · 286 阅读 · 0 评论 -
【bzoj 2011】染色 树剖+线段树
【bzoj 2011】染色 树剖+线段树原创 2016-10-05 13:40:07 · 283 阅读 · 0 评论 -
【cdoj 1071】秋实大哥下棋 扫描线+线段树+脑洞
【cdoj 1071】秋实大哥下棋 扫描线+线段树+脑洞原创 2016-08-23 08:09:08 · 344 阅读 · 0 评论 -
【cdoj 843】冰雪奇缘 线段树保留区间
【poj 843】冰雪奇缘 线段树保留区间原创 2016-08-23 08:17:19 · 627 阅读 · 0 评论 -
【cdoj 1335】 郭大侠与“有何贵干?” 线段树+扫描线
OK,现在来填这个坑。题目虽然说是一个需要维护的三维坐标,但是由于z巨小(1->3)所以直接用二维的扫描线就好了,然后把长方体的高拆了,就变成了求两次扫描线求两次面积再相加就好了(具体可以看代码)。这里由于需要计算被覆盖k次的矩阵的面积,所以需要用线段树来维护当前扫描线被覆盖k次的区域的长度,然后每次向上找新的扫描线的时候就用 △h * 覆盖k次的区域长度1.线段树维护的扫描线是原创 2016-08-02 14:17:25 · 318 阅读 · 0 评论 -
【cdoj 1338】郭大侠与英雄学院 并查集和矩阵那点事
【cdoj 1338】郭大侠与英雄学院 并查集和矩阵那点事原创 2016-08-01 20:31:28 · 675 阅读 · 0 评论 -
【cdoj 1325】卿学姐与基本法 离散化+线段树
【cdoj 1325】卿学姐与基本法 离散化+线段树好吧,第一次写离散化的线段树,用的有点久,主要是因为网上有没有标程,所以自有自己一个人慢慢调,我也是心累,不过最后写出来了还是蛮开心的,啦啦啦注意几点:1.在离散化以后,各个点之间不再是连续的了,所以要加一个flag标记,查询这个节点为根的子树中有没有更改然后记录它的右子树中最左边的点和左子树中最右边的点,好减2.每次更新sum的时候需要用到上面的;3.找到区间后直接返回sum,不原创 2016-07-29 21:43:12 · 320 阅读 · 0 评论 -
【cdoj 1259】昊昊爱运动 bitset
【cdoj 1259】昊昊爱运动 bitset原创 2016-07-30 10:29:00 · 342 阅读 · 0 评论 -
树链剖分模板
#include#include#include#include#define ls u<<1,l,mid#define rs u<<1|1,mid+1,r#define maxn 100020#define ll long longusing namespace std;int n,m,head[2*maxn],hz[maxn],top[maxn],size[maxn],tot原创 2016-08-24 19:55:43 · 218 阅读 · 0 评论 -
考试B 冰雪奇缘改版 多边形剖梯形+线段树维护区间
从天而降很多个多边形,现在有n(1第一行表示数据组数T每一组数据第一行包含一个整数n,表示操作的数量R P 表示有一个多边形出现了,这个多边形有p个点,接下来的一行有2*p个数,以逆时针方向给出多边形的形状Q A B 查询区间[A,B]的面积Sample Input17Q 1 100R 410 10 11 10 13 11 12 11Q 10原创 2016-08-24 20:07:09 · 461 阅读 · 0 评论 -
【bzoj 1748】[Ahoi2009]Seq 维护序列seq 裸的线段树
【bzoj 1748】[Ahoi2009]Seq 维护序列seq 裸的线段树原创 2016-10-16 20:14:20 · 270 阅读 · 0 评论 -
【bzoj 1218】 [HNOI2003]激光炸弹
【bzoj 1218】 [HNOI2003]激光炸弹原创 2016-09-19 22:24:22 · 324 阅读 · 0 评论 -
【bzoj 2102】 [HNOI2005]狡猾的商人 带权并查集维护区间和
【bzoj 2102】 [HNOI2005]狡猾的商人 带权并查集原创 2016-09-19 21:32:05 · 459 阅读 · 0 评论 -
考试 线段树二分+单点修改+区间查询
Problem I定义Mex({al,al+1,al+2,...,ar})为其中最小未出现的自然数给出一个长度为n的序列a1,a2,a3,...,an求所有区间[L,R]的Mex值之和第一行包含一个整数n(1第二行包含n个整数,表示a1,a2,...,an(1输出Mex值之和Sample Input51 0 2 0 1Sample Out原创 2016-08-27 07:50:07 · 566 阅读 · 0 评论 -
考试题 树状数组查找以比x大的数作为中位数的个数+二分中位数
Problem II定义一个长度为奇数的区间的值为其所包含的的元素的中位数现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少第一行两个数n和k(1第二行n个数,0请输出一个数表示答案Sample Input4 33 1 2 4Sample Output2这道题其实学长在上午的时候讲过一道类似的,只是把中原创 2016-08-27 07:24:18 · 702 阅读 · 0 评论 -
sap模板
sap模板 超短 很短原创 2016-09-05 21:41:42 · 407 阅读 · 0 评论 -
【bzoj 1015[JSOI2008]星球大战starwar 反向并查集
【bzoj 1015[JSOI2008]星球大战starwar 反向并查集原创 2016-09-17 11:36:31 · 287 阅读 · 0 评论 -
【洛谷P1268】树的重量 具体问题具体分析
【洛谷P1268】树的重量原创 2016-09-16 17:27:58 · 385 阅读 · 0 评论 -
【cdoj 1328】卿学姐与诡异村庄 并查集(值的一看)
说实话,写这道题的时候心比较乱,虽然一来就想到了并查集,但是老是往带权并查集的地方想,最后看到题解的时候感觉还是一个不错的,至少思路很特别理清逻辑关系分类,并查集!!令A是好人表示为Ag,A是坏人表示为Ab。如果A说B是坏人,那么将Ag和Bb合并,将Ab和Bg合并。如果A说B是好人,那么将Ag和Bg合并,将Ab和Bb合并。如果最后Ag和Ab在同一个集合,就无解其原创 2016-07-29 22:34:54 · 547 阅读 · 0 评论