随笔分类 -  线段树&树状数组

摘要:传送门 sb题面误导了我半天。 按位考虑, 对于 $a[i]$和$i$的一位考虑什么样的$a[j]$和$j$可以转移过来,发现这一位有一种一定可以一种一定不行,还有两种不确定。 考虑魔改$01trie$每一个节点$4$个儿子,但是这样$01trie$会$T$。 发现不确定的两种情况$a[j]$和$j 阅读全文
posted @ 2022-08-21 21:04 Xu-daxia 阅读(44) 评论(0) 推荐(0)
摘要:多次询问求一个串的结尾在$[l,r]$之间的本质不同子串个数。 此题是求一个区间的不同元素的问题,使用扫描线的方法解决,即每次加入一个元素就将这个位置$+1$,这个元素上一次出现的位置$-1$。 考虑使用$SAM$解决。 其实就是将所有结尾在$[l,r]$的前缀代表的节点与parent树的根的路径上 阅读全文
posted @ 2022-08-21 20:37 Xu-daxia 阅读(65) 评论(0) 推荐(0)
摘要:###1001 Static Query on Tree 转化题意之后就是问一棵树有多少点满足是集合$A$中某个节点的祖先且是$B$中某个节点的祖先且是$C$中某个节点的后代。 $|A|+|B|+|C|<=10^5$ 满足条件的点一定构成一条链,并且链上最浅的节点是$C$中节点最深的节点是$A$中一 阅读全文
posted @ 2022-08-01 15:15 Xu-daxia 阅读(34) 评论(0) 推荐(0)
摘要:$n$个点$m$条边的连通图,每个点有第$c_i$种权值为$val_i$的宝藏,问从$x$点出发只通过边权小于等于$y$的边可以获得的宝藏最大权值,每种宝藏权值只能算一遍。宝藏权值带修改。每种宝藏最多有10个。 建出克鲁斯卡尔重构树,考虑在节点上维护答案。发现每种宝藏最多有10个,所以可以建出每一种 阅读全文
posted @ 2022-08-01 14:50 Xu-daxia 阅读(42) 评论(0) 推荐(0)
摘要:传送门 这个题我第一眼望过去还以为CF终于出了一个数据结构题,然而实际上这就是一个数据结构题 ####题意: 维护一个长度为n的序列,序列的每一个元素大小$a[i]$初始为$0$,颜色初始为$1$. 有三个操作执行$q$次 1.把$[l,r]$涂成颜色$c$ 2.把所有颜色为$c$的元素加上$x$ 阅读全文
posted @ 2022-03-21 20:06 Xu-daxia 阅读(89) 评论(0) 推荐(0)
摘要:本题解并不提供圆方树讲解。 ~~所以不会圆方树的出门右转问yyb~~ 没有修改的话圆方树+链剖。 方点的权值为点双连通分量里的最小值。 然后修改的话圆点照修,每一个方点维护一个小根堆。 考虑到可能被菊花卡死。 我们每一个方点只维护儿子的最小值。 当询问的路径$lca$为方点时,$ans=min(an 阅读全文
posted @ 2019-03-07 22:04 Xu-daxia 阅读(223) 评论(0) 推荐(0)
摘要:考虑两一个暴力 1 因为询问$[a,b]$可以拆成$[1,b]$ $[1,a 1]$所以把询问离线,然后就是求$[1,x]$中被$S_i$包含的串的数量。考虑当$[1,x 1] [1,x]$时我们把$S_x$结束节点在fail树的子树加1。然后询问就是求$S_i$在AC自动机上跑时经过所有点的点权用 阅读全文
posted @ 2019-01-07 21:43 Xu-daxia 阅读(223) 评论(0) 推荐(0)
摘要:~~SAM+线段树合并的裸题。~~ 但我们讨论AC自动机的做法。 先建出AC自动机。考虑询问在[a,b]中出现的次数就是$[1,b]$的出现次数 $[1,a 1]$的出现次数。把询问离线。然后我们要求的就是第i个字符串在$[1,x]$中出现次数。我们在从$[1,x 1]$到$[1,x]$的过程中把$ 阅读全文
posted @ 2019-01-07 21:22 Xu-daxia 阅读(199) 评论(0) 推荐(0)
摘要:建立AC自动机然后,加入一个串之后考虑这个串的贡献。我们把这个串扔到AC自动机里面跑。最后对经过每一个点到的这个点在fail树的根的路径上的点有1的贡献。求链的并,我们把这些点按DFS序排序,然后把每一个点加1,每个点与上一个点的LCA 1,然后询问时的答案就是子树和这个用树状数组维护就行。至于为什 阅读全文
posted @ 2019-01-07 21:12 Xu-daxia 阅读(198) 评论(0) 推荐(0)
摘要:我们预处理出来以i为结尾的最长回文后缀(回文自动机的构建过程中就可以求出)然后就是一个区间覆盖,因为我懒得写贪心,就写了线段树优化的DP。 cpp include include include include include using namespace std; const int N=101 阅读全文
posted @ 2019-01-06 20:41 Xu-daxia 阅读(194) 评论(0) 推荐(0)
摘要:给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数。 如有多解输出最靠前的那一个。 我们首先对m个字符串数组建出后缀自动机,然后我们可以通过跳trans边找到S前i个字符代表的前缀的最长后缀。我们要找的是 阅读全文
posted @ 2019-01-06 18:32 Xu-daxia 阅读(255) 评论(0) 推荐(0)
摘要:很容易想到只考虑后缀长度必须为$max(height[rk[i]],height[rk[i]+1])+1$(即$[i,i+x 1]$代表的串只出现过一次)然后我正着做一遍反着做一遍,再取一个$min$最后挂了。。。 设$x=max(height[rk[i]],height[rk[i]+1])+1$我 阅读全文
posted @ 2019-01-03 21:53 Xu-daxia 阅读(254) 评论(0) 推荐(0)
摘要:我们把所有的名,姓,询问都拼起来构成一个新的长串,然后跑一边SA。排完序后对于每一个询问,我们可以二分求出它所对应的区间(即满足这个区间的前缀都是这个询问串)。然后问题就转化为很多区间问区间出现过的不同的数。这个东西可以用离线后吧询问按右端点从小到大排序+树状数组解决(HH的项链,采花)。 那么第二 阅读全文
posted @ 2019-01-03 08:12 Xu-daxia 阅读(212) 评论(0) 推荐(0)
摘要:~~今天原来是平安夜啊~~ 感觉这题是道好题。 一个套路枚举权值$x$,把权值等于$x$的设为1,不等于的设为 1,然后问题转化为多少个区间权值和大于。 发现并不是很好做,还有一个套路,用前缀和查分来表示区间。然后就是 $$i include include include include incl 阅读全文
posted @ 2018-12-24 22:11 Xu-daxia 阅读(288) 评论(0) 推荐(0)
摘要:听说这题的所发和 很像。 然而那道题我使用莫队写的。。。 这是一个套路,pre数组加升维(在线)。 记录一个$pre$数组,$pre[i]$代表上一个和i颜色相同的下标。 我们把询问离线,扫一遍$a$数组。然后每扫过一个点,就把$pre[pre[i]]$这个位置上减1,把$pre[i]$加1。然后每 阅读全文
posted @ 2018-12-23 21:21 Xu-daxia 阅读(145) 评论(0) 推荐(0)
摘要:发现每次区间加只能加1,最多全局加$n$次,这样的话,最后的答案是调和级数为$nlogn$,我们每当答案加1的时候就单点加,最多加$nlogn$次,复杂度可以得当保证。 然后问题就是怎么判断答案是否该加1。我们可以用线段树设初值为给出的排列,把区间加改成区间减,维护最小值。当最小值为0是遍历左右子树 阅读全文
posted @ 2018-12-20 07:36 Xu-daxia 阅读(207) 评论(0) 推荐(0)
摘要:一开始想的是莫队,然后维护几个bitset,然后瞎搞。脑子里想了想实现,发现并不好写。 还是主席树好写。我们维护一个权值的线段树,记录每一个权值的最后一次出现的位置下标。我们查询的时候要在前$r$颗线段树中找到第一个出现的位置下标小于$l$的数,在线段树上二分就行了。 这个想法还是非常巧妙的。 cp 阅读全文
posted @ 2018-12-17 21:23 Xu-daxia 阅读(166) 评论(0) 推荐(0)
摘要:这题需要一个黑科技——摩尔投票。这是一个什么东西?一个神奇的方法求一个序列中出现次数大于长度一半的数。 简而言之就是 ; 比如有一个代表投票结果的序列。 $$[1,2,1,1,2,1,1]$$ 我们记录一个$num$和$cnt$先别管它们是干什么的。我们模拟一遍模拟排序。 $$首先读第一个数1,nu 阅读全文
posted @ 2018-12-15 18:16 Xu-daxia 阅读(240) 评论(0) 推荐(0)
摘要:我们把每一次交换看做两个插入两个删除。然后就是一个三维偏序。时间一维,下标一维,权值一维。 cpp include include include include include using namespace std; const int N=100010; struct query{ int t 阅读全文
posted @ 2018-12-13 17:26 Xu-daxia 阅读(118) 评论(0) 推荐(0)
摘要:1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。 游戏开始前,一 头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,000)堆干草,每堆有若干捆,并且没有哪两堆中的草一样多。所 阅读全文
posted @ 2018-08-30 18:20 Xu-daxia 阅读(340) 评论(0) 推荐(0)