数据结构
Thomas_ZQQ@Runespoor
这个作者很懒,什么都没留下…
展开
-
【题解】codeforces 1209 - problem G2. Into Blocks (hard version)
链接做法感谢 @newbiegcz 的指导做法和题解是一样的,然而英文太烂没有看懂。看了cz_xuyixuan的才看懂。后面维护方法和他略有不同要找分界点:分段后,每段包含其中的所有颜色的所有出现位置首先:一个颜色只考虑其两端[Li,Ri][L_i,R_i][Li,Ri],分界点不能在这个区间中间。每个颜色会删去在[Li,Ri)[L_i,R_i)[Li,Ri)的分界点,剩下的就...原创 2020-02-08 12:27:24 · 432 阅读 · 0 评论 -
【知识小结】分块和莫队技巧
题目P4119 [Ynoi2018]未来日记题意1.把区间[l,r]内所有x变成y2.查询区间[l,r]内k小值值域分块,经典的求k小套路:维护前缀和,一块一块得跳这题的关键是修改,要维护值被修改成什么的映射,这个一定要想清楚!我一直没有想清楚,写错了很多地方。对拍了很久才过。更多题解 orz small fatcode洛谷测动态实际空间,良心!...原创 2019-04-17 15:05:33 · 349 阅读 · 0 评论 -
【学习小结】数据结构复习
kd-tree+替罪羊重构大概复习了一下kd-tree。主要就是矩形查询的剪枝。有时候用替罪羊重构,或者每m次操作重构。然后矩形k大查询可以线段树套kd-tree : orz claris的常数 : 非递归+只插入右边比赛的时候感觉比较难写的大数据结构可以大胆用kd-tree水。根据赛场时间和通过率而定吧claris的板,我改成了bzoj 4066#include<bits/...原创 2019-04-03 21:53:18 · 120 阅读 · 0 评论 -
【题解】codeforces 1039D. You Are Given a Tree 树形dp+二分答案
题解答案显然递减,并且变化点只有根号个。当路径长度&gt;=sqrt(n)时,答案显然小于根号n所以二分答案找变化点即可这样根号的性质很常见!还有一类思路是sz不同的子树只有根号种这题还有更厉害的做法,留坑nsqrt(n * logn) 的做法要卡常,dfs太慢,每次check应该用bfs。#include&lt;bits/stdc++.h&gt;using namespace s...原创 2019-02-12 22:19:38 · 257 阅读 · 0 评论 -
【题解】UOJ #388. 【UNR #3】配对树 找性质+链剖或线段树合并
题目题解**关键是把区间配对后的答案转化成每条边的贡献。可以发现,每条边贡献当且仅当子树内的点数为奇数。并且每条边最多贡献一次****那么可以对每条边分别考虑。移动右端点,插入一个点相当于该点到根的路径权值取反,直接链剖就好了**再进一步转化考虑每条边贡献次数。即长度为偶数且在子树内出现数的次数为奇数的区间个数,线段树合并维护线段树合并做法...原创 2019-02-07 18:42:01 · 179 阅读 · 0 评论 -
【题解】UOJ#418. 【集训队作业2018】三角形 线段树合并+贪心
题目题解题解考虑确定顺序的过程,每次操作+w[i] , -sigma(w[j]) 让前缀最大值最小。不能只考虑儿子的顺序贪心,因为在子树之间可能有奇怪的顺序,不是按照子树依次填的因为有限制,儿子先填,父亲后填,把序列倒过来考虑,抓化成父亲先填儿子后填。这样每个点只被一个点限制,才好贪心维护二元组(B[i]−A[i],B[i]),B[i]=sigma(w[j]),A[i]=w[i] ...原创 2019-02-07 17:50:52 · 550 阅读 · 0 评论 -
【题解】bzoj 3307: 雨天的尾巴 线段树合并
DescriptionN个点,形成一个树状结构。有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品。完成所有发放后,每个点存放最多的是哪种物品。Input第一行数字N,M接下来N-1行,每行两个数字a,b,表示a与b间有一条边再接下来M行,每行三个数字x,y,z.如题Output输出有N行每i行的数字表示第i个点存放最多的物品是哪一种,如果有...原创 2019-02-07 14:36:04 · 243 阅读 · 0 评论 -
【题解】bzoj 2138: stone hall定理+线段树
题目题解**选出的点必须存在完备匹配。于是用hall定理转化问题考虑每个区间都符合hall定理则肯定有解因为区间不包含可以用TR[R] - TL[L - 1]表示在【L,R】的询问区间每次询问是前缀max 和 后缀min之差 , 因为所有区间都满足hall定理才行具体看yyb的题解、。我就不赘述了 **注意:前缀max包含0位置,所以最小值为0#include<bits/...原创 2019-02-07 09:51:14 · 311 阅读 · 0 评论 -
【学习小结】CDQ分治
CDQ分治经常用来解决复杂的数据结构题。大部分树套树、平衡树写成CDQ会更简单和清晰本质都是维护偏序关系,而CDQ则是以分治的形式。一般CDQ是考虑分治左区间对右边的贡献,而要是和整体二分不区分,就是算一边的时候可以直接写出另一边的贡献形式。(反正都是分治,会用就行,名字不重要)下面是例子【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)这题开始只会线段树分治+...原创 2019-01-29 21:18:05 · 295 阅读 · 0 评论 -
hdu5957 ICPC-2016 沈阳 I bfs序+线段树+分类讨论
题面思路:用线段树维护bfs序,因为同一层的儿子的bfs序连续很久没有写过分类讨论了细节错误很多:1. k == 2时要判在不在环上,环够不够长,fa[x]在不在环上2. bfs序只保证所有儿子在连续区间,而层与层之间是不连续的。开始竟然天真的以为是连续的调了 1h多 还写了 30多min 代码能力要加强!#include <bits/stdc++.h>#defin...原创 2018-10-22 16:16:13 · 196 阅读 · 0 评论 -
CF round 399 G 线段树合并(树上主席树)
题目:这里写链接内容 有一颗树。求出删除一个点形成的森林中sz的最大值。 进行一次改parent操作使得最大值最小。sol1: 森林中肯定删最大的树,加到最小的树上。 只需要知道删除的最优子树sz。显然是最大树所有子树中sz最接近(mx-mn)/ 2 的。用树上主席树查前驱,后继。 有几个技巧:统计答案时 x到根路径上的点sz会变,需要删掉,加入vector中分开维护。 vecto...原创 2018-08-13 21:39:42 · 213 阅读 · 0 评论 -
bzoj 5394: [Ynoi2016]炸脖龙 数论+树状数组
给一个长为n的序列,m次操作,每次操作: Input 第一行两个整数 n,m 表示序列长度和操作数 接下来一行,n个整数,表示这个序列 接下来m行,可能是以下两种操作之一: 1 l r x 表示区间[l,r]加上 x 2 l r p 表示对区间[l,r]进行一次查询,模数为 p n , m <= 500000 , 序列中每个数在 [2,1e9] 内,p <= 2e7,...原创 2018-07-30 21:50:38 · 865 阅读 · 0 评论 -
bzoj 5395[Ynoi2016]谁的梦 set+map
定义一个序列的权值为不同数字的个数,例如 [1,2,3,3] 权值为 3 现在有n个序列,我们在每个序列里面选一个连续非空子串,拼接起来,求所有选法得到的序列的权值之和 如果一个序列能通过多种方法被选择出来,那么计算多次 本题带修改操作,格式请参考输入格式 由于结果可能过大,请输出答案 mod 19260817 的结果 Input 第一行两个数 n,m,表示有n个序列,m次修改 然后...原创 2018-07-30 21:44:10 · 277 阅读 · 0 评论 -
bzoj 4817: [Sdoi2017]树点涂色 lct+线段树
DescriptionBob有一棵n个点的有根树,其中1号点是根节点。Bob在每个点上涂了颜色,并且每个点上的颜色不同。定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色。Bob可能会进行这几种操作:1 x:把点x到根节点的路径上所有的点染上一种没有用过的新颜色。2 x y:求x到y的路径的权值。3 x在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权...原创 2018-07-05 12:30:31 · 114 阅读 · 0 评论 -
LOJ #2537. 「PKUWC 2018」Minimax (线段树合并 优化dp)
题目:点击打开链接题解关键:首先是dpi,j表示第i个点选第j小的概率。转移用前缀和优化。 然后发现转移时只涉及到子树内的值,于是想到线段树合并。 合并x,y时,若都有则递归,否则直接乘相应系数。 递归时直接算前、后缀和,因为当x或y为空时不需计算 合并的时候相当于对值域分治,所以把贡献...原创 2018-07-04 18:23:52 · 368 阅读 · 0 评论