
----------数据结构----------
VanishD
気付かないうちにオトナになって,绮丽な嘘 口に出来るほど。
展开
-
[bzoj5077][uoj198][ctsc2016]时空旅行【线段树】【dfs序】
【题目链接】 http://uoj.ac/problem/198 https://www.lydsy.com/JudgeOnline/problem.php?id=5077 【题解】 先求出每个星球在dfs序上的对应区间,虽然有的星球不止一个区间,但区间的总数是O(N)O(N)O(N)级别的。然后把这些区间标记在线段树上。显然每个星球可以看做斜率优化中的一条直线,所以对于线段树...原创 2018-06-04 14:09:19 · 483 阅读 · 0 评论 -
[bzoj4810][Ynoi2017]由乃的玉米田【bitset】【莫队】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4810 【题解】 首先可以离线下来使用莫队,这样就知道了每个询问区间中每个数是否出现,将其压为一个bitset,记为fff。 考虑如何询问: 对于操作1:可行的条件是fff^f<<xf<<xf 000。 对于操作2:记ggg表示f...原创 2018-06-23 22:06:37 · 307 阅读 · 0 评论 -
[bzoj3687]简单题【bitset】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=3687 【题解】 简要来说就是求出有哪些和出现了奇数次。 记fi,jfi,jf_{i,j}表示现在出来到第iii个数和为jjj的奇偶性。 于是有fi,j=fi−1,jfi,j=fi−1,jf_{i,j}=f_{i-1,j}^fi−1,j−aifi−1,j−ai...原创 2018-06-23 21:57:28 · 370 阅读 · 0 评论 -
[bzoj4713]迷失的字符串【bitset】【树形dp】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4713 【题解】 首先考虑只有一个串时的做法,可以进行dp,记fi,jfi,jf_{i,j}表示从iii的子树中任意一点出发到iii能否匹配字符串的1..j1..j1..j位且iii与jjj匹配。同时记gi,jgi,jg_{i,j}表示从iii的子树中出发到iii能否从后...原创 2018-06-23 21:33:29 · 928 阅读 · 4 评论 -
[bzoj3786]星系探索【欧拉序】【splay】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=3786 【题解】 用splay维护欧拉序,修改相当于将一段区间移到另一个位置。子树加就是区间加,查询链的答案相当于一段前缀和,都是splay基本操作。 时间复杂度O(M∗logN)O(M∗logN)O(M*logN) 【代码】/* - - - - - - - ...原创 2018-05-31 19:40:44 · 347 阅读 · 0 评论 -
[bzoj4184]shallot【线段树】【线性基】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4184 【题解】 以时间为下标建立线段树,每个数有一个存在时间区间,挂在对应线段树节点上。询问时维护一个线性基,dfs这颗线段树,在叶节点查询。 时间复杂度O(31N∗logN)O(31N∗logN)O(31N*logN) 【代码】/* - - - - - -...原创 2018-05-30 17:09:23 · 343 阅读 · 0 评论 -
[bzoj5294][Bjoi2018]二进制【线段树】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=5294 【题解】 考虑一个二进制数什么时候重排后模3不余0,只有两种情况。 1.只存在一个1。 2.存在奇数个1且0的数量不大于1。 那么我们考虑从总方案中减去不合法的方案,在线段树中每个节点维护左(右)端第一个与第二个0/1。分情况讨论一下即可。 ...原创 2018-05-30 14:46:06 · 518 阅读 · 0 评论 -
[bzoj5338][loj2557][TJOI2018]xor【可持久化线段树】【dfs序】【欧拉序】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=5338 https://loj.ac/problem/2577 【题解】 可以开两棵可持久化权值线段树,一棵记dfs序维护子树信息,另一棵记欧拉序维护链信息。在开先段树的时候左边的二进制首位为000,右边为111。 对于一次询问,贪心向下选取就行了。 时...原创 2018-06-13 10:59:20 · 388 阅读 · 0 评论 -
[bzoj3551][ONTAK2010]Peaks加强版【可持久化线段树】【最小生成树】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=3551 【题解】 这一题要求强制在线,所以要维护历史版本的信息。 对于每条在最小生成树上的边(u,v),将u,v跳到所在的最高父亲,然后不是直接合并,而是新建一个点,做一次可持久化线段树合并,把(u,v)的父亲设为这个点。对于每个询问,从它开始向上跳,显然向上跳的困...原创 2018-05-29 21:02:01 · 509 阅读 · 0 评论 -
[bzoj3545][ONTAK2010]Peaks【线段树】【并查集】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=3545 【题解】 显然离线后会好做许多。 将所有边与询问的困难值排序,用并查集维护连通性,用权值线段树维护连通块权值。每次加入一条边时,若在不同连通块中,就将这两个块合并。用线段树合并维护权值线段树。查询时查询所在块的第K大即可。 时间复杂度O(N∗logN)...原创 2018-05-29 18:59:03 · 305 阅读 · 0 评论 -
[bzoj2653]middle【可持久化线段树】【二分】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=2653 【题解】 遇到求中位数的题,不难想到二分答案,然后把序列转化为-1和1。 考虑二分后如何判断,对于每个不同的二分的值,可以按位置为下标建立一棵线段树,每个节点记录当前是-1还是1。[b,c][b,c][b,c]必须全取。[a,b)[a,b)[a,b),(c,...原创 2018-05-29 18:49:37 · 251 阅读 · 0 评论 -
[bzoj4855][Jsoi2016]轻重路径【树链剖分】【线段树】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4855 【题解】 考虑一个轻重路径剖分,当有一个新的节点被加入后,最多改变O(log)O(log)O(log)个路径的剖分。...原创 2018-05-29 18:36:05 · 409 阅读 · 0 评论 -
[bzoj5334][loj2573][TJOI2018]数学计算【线段树】
【题目链接】 https://loj.ac/problem/2573 【题解】 线段树维护区间乘积。 时间复杂度O(N∗logN)O(N∗logN)O(N*logN) 【代码】# include &amp;lt;bits/stdc++.h&amp;gt;# define ll long long# define inf 0x3f3f3f3f# defi...原创 2018-06-12 13:24:02 · 212 阅读 · 0 评论 -
[bzoj4552][Tjoi2016&Heoi2016]排序【线段树】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4552 【题解】 线段树的一些特殊技巧:合并与分裂。 首先把每个点都建出一棵权值线段树,每次排序时,将包含的权值线段树合并在一起即可。可以用set维护当前的线段树集合。 但是排序可能会将两端的线段树分开,这时就要进行分裂操作,形象一点,就是将线段树从中间切开,...原创 2018-05-28 22:10:45 · 286 阅读 · 0 评论 -
[bzoj4408][Fjoi 2016]神秘数【线段树】【复杂度分析】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=4408 【题解】 先建出可持久化线段树,查询时查询当前可到达的区间中是否还有其他数,有就更新可到达区间并再次查询,没有就退出。 由于每一次更新的数都大于上一次的区间总长,所以区间长度是指数级增长的(最差是斐波那契数列)。 时间复杂度O(N∗log2N)O(N∗...原创 2018-05-28 22:01:19 · 333 阅读 · 0 评论 -
[bzoj3669][uoj3][Noi2014]魔法森林【link-cut-tree】
【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=3669 http://uoj.ac/problem/3 【题解】 首先我们可以从小到大枚举a的最大值,然后维护b的最小生成树。显然需要用到lct,然而lct并不能维护边信息,所以我们需要把每条边变成一个点并向两头连边。每次新加入一条边(u,v)(u,v)(u,v),...原创 2018-06-04 14:37:25 · 243 阅读 · 0 评论 -
[bzoj4504]K个串【可持久化线段树】【堆】
【题目链接】 【题解】 首先记下每个点向右所控制的区间,就是它到下一个与它相同的位置-1。 我们考虑对于每个左端点维护一棵线段树下标表示以该点为右端点的区间的答案。 那么左端点为1的区间可以O(N)O(N)O(N)暴力求出。 对于两个相邻的左端点i,i+1i,i+1i,i+1,只有iii所控制的区间会减去iii的值。用可持久化线段树+标记永久化即可。 然后将...原创 2018-06-25 21:10:30 · 408 阅读 · 0 评论