- 博客(75)
- 收藏
- 关注
原创 看错题(赛氪冬季赛)【线段树】
传送门题意给定一个能够满足是完全二叉树的线段树能够在线段树上区间加值,每次询问求整棵树的价值价值定义为∑u∑w,w∈u➡1路径上的节点值,u∈线段树叶子节点\sum_u{\sum{w},w\in u➡1路径上的节点值},u \in线段树叶子节点∑u∑w,w∈u➡1路径上的节点值,u∈线段树叶子节点分析数据范围较大,需要在区间求和的过程中,动态维护其价值一开始建树的时候,可以预先求出价值ans=∑uvalu∗lenu,u∈所有线段树节点ans=\sum_u{val_u*len_u},u \in
2022-03-28 18:57:48
1657
原创 树的果实(赛氪冬季赛)【启发式合并 dsu on tree】
传送门题意给定一颗有根树(1为根),mmm次询问,当前询问的子树中的价值是多少?价值定义为,取子树中所有边权,∑w(w∗cntw)2,w∈子树边权集合\sum_{w}{(w*cnt_w)^2},w\in子树边权集合∑w(w∗cntw)2,w∈子树边权集合分析题意很清楚,求的是子树信息统计,此时我们可以使用树上启发式合并来解决(优美的暴力)在之前有一篇文章有写【dsu个人理解】暴力的写法是,对于每个子树都进行统计,正确性保证,时间复杂度为On2On^2On2,但是通过启发式合并,能够降到Onl
2022-03-28 18:35:03
501
原创 F - LIS on Tree【二分OR权值线段树】
传送门 atcoder F - LIS on Tree题意给定一颗树,求节点111到各个节点路径上的最长上升子序列的长度分析之前只知道对序列进行二分nlognnlognnlogn的做法给定一个数组1 4 3 6 2 5 8 7 8 9当前数114143136136212651258125871257812578
2022-03-07 20:51:35
239
原创 H. Reverse the String【哈希+二分】
传送门 codeforces H. Reverse the String题意给定一个字符串,求可以将字符串中的任意区间的一个连续子串翻转一次的前提下,求翻转后字典序最小的字符串是什么分析将原串的所有字符排序,翻转肯定是从排序后的字符串与原字符串不同的位置开始的那么可以遍历翻转的结束位置,比较所有翻转后字符串的大小假如当前字典序最小的是 sss,那么和翻转后的字符串 ttt比较时,可以先找到两个字符串的 最长公共前缀(lcplcplcp),前面都是相同的,只需比较不同的第一个位置的大小即可此时,
2022-03-07 20:07:07
934
原创 POJ1509-Glass Beads【后缀数组or后缀自动机SAM】
POJ1509-Glass Beads【后缀数组or后缀自动机SAM】最小循环串问题给定一个字符串S,每次可以将它的第一个字符移动到最后面,求这样能够得到的字典序最小的字符串。
2021-11-30 21:39:20
683
原创 P4219 [BJOI2014]大融合【LCT】维护子树信息
P4219 [BJOI2014]大融合【LCT】维护子树信息维护子树信息这里用个 sz2sz2sz2 维护虚子树节点数量也就是非实子树的数量
2021-11-30 21:17:33
135
原创 P1198 [JSOI2008]最大数
传送门分析查询数列倒数LLL个数的最大值添加一个值到数列末尾区间最值,动态添加,SplaySplaySplay不是也能干这些事情吗这里无非就是为了要维护一个最大值而已,记得预插入两个哨兵(最小值和最大值)那么请看 push_uppush\_uppush_up 函数,此题得解行! 那就用SplaySplaySplay代码//P1198/* @Author: YooQ*/#include <bits/stdc++.h>using namespace std;#de
2021-09-14 18:56:54
131
原创 P1486 [NOI2004] 郁闷的出纳员【Splay】
传送门第一行有两个整数 nnn 和 min\minmin。nnn 表示下面有多少条命令,min\minmin 表示工资下界。接下来的 nnn 行,每行一个字符 xxx 和一个整数 kkk,表示一条命令。命令可以是以下四种之一:I kI \space kI k 新建一个工资档案,初始工资为 kkk。如果某员工的初始工资低于工资下界,他将立刻离开公司。A kA \space kA k 把每位员工的工资加上 kkk 。S kS \space kS&
2021-09-14 18:56:30
150
原创 P2234 [HNOI2002]营业额统计【Splay】
传送门给定长度为NNN的数组,表示营业额一天的最小波动值=min{∣该天以前某一天的营业额−该天营业额∣}一天的最小波动值 = \min\{|\text{该天以前某一天的营业额}-\text{该天营业额}|\}一天的最小波动值=min{∣该天以前某一天的营业额−该天营业额∣}求每一天的营业额第一天为它本身分析假设当前的营业额为 xxx,我们要知道以前的,小于xxx的最大值,大于xxx的最小值这就是前驱和后继了所以我们要动态维护前驱后继注意,非严格前驱后继!可以等于,所以做些小变化。详细
2021-09-14 18:56:23
239
原创 P3369 【模板】普通平衡树【Splay】
传送门分析您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入 xxx 数删除 xxx 数(若有多个相同的数,因只删除一个)查询 xxx 数的排名(排名定义为比当前数小的数的个数 +1+1+1 )查询排名为 xxx 的数求 xxx 的前驱(前驱定义为小于 xxx,且最大的数)求 xxx 的后继(后继定义为大于 xxx,且最小的数)行!就用Splay了,只要理解,rotate和splay,直接往上套,别管什么常数了插入,找到xxx的前驱和后继,先旋前驱到根
2021-09-14 18:56:14
102
原创 P3380 【模板】二逼平衡树(树套树)
传送门查询 kkk 在区间内的排名查询区间内排名为 kkk的值修改某一位值上的数值查询 kkk 在区间内的前驱(前驱定义为严格小于 xxx,且最大的数,若不存在输出 −2147483647-2147483647−2147483647)查询 kkk 在区间内的后继(后继定义为严格大于 xxx,且最小的数,若不存在输出 214748364721474836472147483647)分析对于静态区间第K大来说,那就上主席树吧如果动态的话,就树套树了如果是双动态的话,那就树套树套树了(大雾)
2021-09-14 18:56:05
123
原创 P3391 【模板】文艺平衡树 【Splay】
传送门您需要写一种数据结构(可参考题目标题),来维护一个有序数列。其中需要提供以下操作:翻转一个区间,例如原有序序列是 [5 4 3 2 1],翻转区间是 [2,4] 的话,结果是 [5 2 3 4 1]。分析一道经典 SplaySplaySplay 模板题这里介绍一下经常使用的 SplaySplaySplay 相关代码和思想树的节点struct Tr { #define ls son[0] #define rs son[1] int k, sz, fa, rev; int son[2
2021-09-14 17:33:21
97
原创 P5490 【模板】扫描线
传送门扫描线模板分析逃不掉,总该要学的。学完后,发现思想不难,早干嘛去了大概说一下核心要义 扫描&&线段定义一根线,从下往上扫因为矩形的话,肯定在竖直方向有一段是连续的(也就是有个高,已知)如果要知道某一小段的面积,我们需要知道长度为多少?那么我们就可以使用线段树维护这个长度长度的定义为,只要有一个矩形贡献了一段长度,这一段的长度就已经有了,不会因为矩形个数增加把所有长度都统计起来,最后乘以高度即可接下来如何维护如果一个矩形的两个x相同,说明没有面积,面积为 000
2021-09-14 17:25:53
145
原创 P4180 [BJWC2010]严格次小生成树
传送门如题,严格次小生成树分析对于 KruskalKruskalKruskal 执行过程中,能够构造出一棵树代码//P4180/* @Author: YooQ*/#include <bits/stdc++.h>using namespace std;#define sc scanf#define pr printf#define ll long long#define int long long#define FILE_OUT freopen("out", "w"
2021-09-08 01:04:29
109
原创 bzoj2870. 最长道路tree【点分治】【边分治】
传送门HHH 城很大,有NNN个路口(从111到NNN编号),路口之间有N−1N-1N−1边,使得任意两个路口都能互相到达,这些道路的长度我们视作一样。每个路口都有很多车辆来往,所以每个路口i都有一个拥挤程度v[i]v[i]v[i],我们认为从路口sss走到路口ttt的痛苦程度为sss到ttt的路径上拥挤程度的最小值,乘上这条路径上的路口个数所得的积。现在请你求出痛苦程度最大的一条路径,你只需输出这个痛苦程度。简化版描述:给定一棵NNN个点的树,求树上一条链使得链的长度乘链上所有点中的最小权值所得的积
2021-09-02 11:25:37
298
原创 bzoj4372. 烁烁的游戏【动态点分治】
背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠。题意:给定一颗$n$个节点的树,边权均为$1$,初始树上没有皮皮鼠。烁烁他每次会跳到一个节点$u$,把周围与他距离不超过d的节点各吸引出$w$只皮皮鼠。皮皮鼠会被烁烁吸引,所以会一直待在节点上不动。烁烁很好奇,在当前时刻,节点 $u$ 有多少个他的好朋友---皮皮鼠。大意:给一颗$n$个节点的树,边权均为 $1$,初始点权均为 $0$,$m$ 次操作:$Q$ $x$:询问 $x$ 的点权。$M$ $x$ $d$ $w$:将树上与节点 $x$ 距离
2021-09-01 17:47:37
288
原创 牛客练习赛 F红蓝树【Kruskal重构树】【主席树】
牛客练习赛 F红蓝树有一张 n 个点,m 条边的无向图。点从 0 到 n-1 编号。边有边权和颜色,颜色为红色和蓝色中的一种。给定 q 组询问,每次给定两个参数 x,t。删除边权大于 t 的红色边和边权小于 t 的蓝色边。如果此时两个点 x,y 既有仅经过红色边的路径相连,又有仅经过蓝色边的路径相连,那么称这两个点连通。求与编号为 x 的点连通的点的数量(包括 x 本身)。询问间相互独立,每次询问的删除不会影响其他询问。分析对于一个无向图,对于边权大小讨论的问题,通常与KruskalKruskalKr
2021-09-01 17:46:02
397
原创 zoj3316.Game【带花树】
zoj3316.Game【带花树】给定一个棋盘,棋盘上有些点轮流移除,距离上次移除的棋子的哈密顿距离,不大于K的棋子第一步移除任选棋子,问是否后手必胜?
2021-09-01 17:43:17
237
原创 牛客2021年七夕节比赛 F 清楚姐姐的翅膀们【带花树】
清 楚 姐 姐 的 后 宫 有 很 多 妹 子 , 她 们 都 是 清 楚 姐 姐 的 翅 膀 。$N$个妹子,$M$个蝴蝶结每个蝴蝶结能给给定的几个人求获得$>=2$个蝴蝶结的妹子的**最多**数量
2021-09-01 17:40:45
319
原创 HDU3446 daizhenyang‘s chess【带花树】
HDU3446 daizhenyang‘s chess【带花树】给定一个棋盘,有空地和墙两种方块(棋子在中间)棋子只能往图中规定的 $20$个黑点**跳过去**(黑点不能是墙,保证初始位置不是墙)
2021-09-01 00:58:55
213
原创 SP10707 COT2 - Count on a tree II【树上莫队】
SP10707 COT2 - Count on a tree II【树上莫队】给定一颗无根树,求树上两点路径上的节点有多少不同的数字可以离线前提,能够通过某种操作,将树上路径问题,转化成区间问题这样,类似于求区间不同数,区间众数,区间mex等操作就能通过莫队离线来做了
2021-08-29 17:44:46
145
原创 dfs序和欧拉序构造方法及常用性质
背景:有个题解需要介绍下这两者的性质,这里就顺便写了个总结了核心:将树上问题转化成区间问题欧拉序欧拉序,有2*n或2*n-1个编号dfs序,有n个编号欧拉序,我理解的有两种搞法(可能叫法有误,思想就是那个思想)进入节点记录,遍历完所有子节点后,出节点时,当前时间戳记录进入节点记录,遍历子节点的时候,返回到本节点时记录具体代码体现为dfn[x]dfn[x]dfn[x] 记录的是,xxx节点的时间戳sa[y]sa[y]sa[y]记录的是,时间戳为 yyy 的是哪个节点(也就是“谁”的意思
2021-08-29 17:40:21
1223
原创 P3241 [HNOI2015]开店【动态点分治】
P3241 [HNOI2015]开店【动态点分治】求所有值在 l ∼ r 区间的节点,距离某个点的距离和(有边权,也就是边权不一定为1,范围在1e9以内)对于每个作为重心的节点,维护他管辖范围内所有节点的距离,年龄信息,可以存入vector 中,在数组中按照年龄排序(原因是,查询要查找年龄区间的,这样才能二分找到),排序好后,求前缀和。最后统计的时候能够直接通过前缀和,得到区间内所有节点的距离和
2021-08-29 15:05:03
140
原创 bzoj2051. A Problem For Fun 【动态点分治】+【动态开点权值线段树】
bzoj2051. A Problem For Fun 【动态点分治】+【动态开点权值线段树】给出一个 N个结点的树,每条边有一个正整数权值,定义两个结点的距离为连接这两个结点路径上边权的和。对于每个结点 i,它到其他 N−1个结点都有一个距离,将这些距离从小到大排序,输出第 K个距离。
2021-08-29 13:42:10
182
原创 P3402 可持久化并查集 【可持久化线段树】详解
给定 nnn 个集合,第 iii 个集合内初始状态下只有一个数,为 iii。有 mmm 次操作。操作分为 333 种:1 a b 合并 a,ba,ba,b 所在集合2 k 回到第 kkk 次操作(执行三种操作中的任意一种都记为一次操作)之后的状态3 a b 询问 a,ba,ba,b 是否属于同一集合,如果是则输出 111 ,否则输出 000传送门可持久化并查集模板介绍并查集通常来说是不可逆的,因为我们存在很多骚操作,让并查集的复杂度降到每次查询均摊O(1)O(1)O(1),比如路径压缩
2021-08-25 13:39:12
222
原创 P6329 【模板】点分树 | 震波【动态点分治】详解
传送门给定一个无根树,求距离某点不小于kkk的所有点的权值和支持单点修改分析动态点分治,点分治是主要思想假如说,上面的询问操作只有一次那么,我们一次点分治就能够完成查询权值和代码代码...
2021-08-24 21:01:23
202
原创 P2824 【[HEOI2016/TJOI2016]排序】【线段树分裂】+【珂朵莉树】详解
戳这里,离线做法给定一个长度为NNN的数组,对MMM个区间 l∼rl \sim rl∼r 进行排序求最后 ppp 位置的值排序分(正序和倒序两种)分析上面给的链接有离线的做法,算是一个比较套路的做法,用线段树维护010101序列可以在 lognlognlogn 的时间内实现排序,所以通过二分最终答案可以得到值但是这题强制要求在线呢?这样的话,我们需要使用数据结构维护这些数的状态如何维护信息我们思考这样一个过程:初始我们有NNN个区间,都是有序的(每个数自成一个区间)一旦将区间l∼rl
2021-08-24 19:56:28
369
2
原创 P5494 【模板】线段树分裂
给出一个可重集 aaa(编号为 1),它支持以下操作:0 p x y:将可重集 ppp 中大于等于 xxx 且小于等于 yyy 的值放入一个新的可重集中(新可重集编号为从 222 开始的正整数,是上一次产生的新可重集的编号+1+1+1)。1 p t:将可重集 ttt 中的数放入可重集 ppp,且清空可重集 ttt(数据保证在此后的操作中不会出现可重集 ttt)。2 p x q:在 ppp 这个可重集中加入 xxx 个数字 qqq。3 p x y:查询可重集 ppp 中大于等于 xxx 且小于等于 .
2021-08-24 19:00:15
188
原创 P3332 [ZJOI2013]K大数查询【整体二分】或【树套树】
传送门给定一个长度为NNN的可重集合支持修改,离线求区间可重集合的并集第K大分析对于区间第K大,支持修改,自然会想到树套树经典的树套树,求动态区间第K大的时候用树状数维护版本信息,主席树(权值线段树)用来记录当前版本下的信息接下来求区间第KKK大,进行二分就行了这里由于是可重集,可以使用权值线段树维护可重集中数字的数量,作为内层嵌套外层要维护区间的可重集,使用线段树维护区间可重集...
2021-08-21 20:23:06
334
原创 P2617 Dynamic Rankings 动态区间第K大【树套树】或【整体二分】
传送门动态区间第KKK大问题,单点修改(这里是第kkk小,即是从小到大第kkk个)这里还有个区间修改,有点类似的 P3332 [ZJOI2013]K大数查询分析树套树树套树,就是用一种树形结构维护另一个数据结构形式多样,根据需求定制这里是,动态区间第KKK大考虑静态的情况下,解法有在线:主席树,划分树离线:整体二分如果要支持修改,划分树是根据最终结果排序后再构造出来的树,所以不资瓷修改剩下的,主席树和整体二分了,整体二分下面再说主席树静态区间,每一个版本的值域情况对每一个位置
2021-08-21 20:02:23
752
原创 CF-558-E. A Simple Task【线段树区间set】
传送门给定一个长度为NNN字符串,均为小写字母对区间进行MMM次排序,从小到大或者从大到小求,最后的字符串长什么样分析这里发现,小写字母只有26个,对于每次排序操作,就让这些字符单独排序,正序就先排a,在a排完的位置后排b,以此类推那么,就构建26棵线段树,维护当前树表示字母出现的位置对于排序来说,对某个区间字母进行排序,为区间setsetset,要知道有多少个字母进行排序,又是区间queryqueryquery,所以线段树支持这两个功能足以,为了保证复杂度,懒惰标记是要有的代码//CF5
2021-08-21 17:29:41
176
原创 CF-940-F. Machine Learning【带修莫队】
传送门维护区间数字出现次数的mexmexmex要求修改,支持离线分析支持离线,考虑莫队区间数字出现次数的mexmexmex经典带修莫队直接维护数字出现的次数找mexmexmex的时候,可以直接暴力找证明:当最差的时候,每种次数都出现了一遍,且这个次数最高也就是,1+2+3+4+...x=N1+2+3+4+... x = N1+2+3+4+...x=N此时x最高到 N\sqrt{N}N找mexmexmex最差也就是N\sqrt{N}N,乘上莫队复杂度,可以过如果信不过的话,可以使
2021-08-21 17:21:22
184
原创 P1903 [国家集训队]数颜色 / 维护队列【带修莫队】
维护区间不同的数,带修改,离线传送门分析带修莫队,在原来莫队的基础上增加一维,时间维度原来的简单莫队就是在区间 l∼rl \sim rl∼r,调整左右端点位置,现在还要调整时间的位置不修改的区间不同数,另一题 SP3267 DQUERY - D-query【莫队】或【主席树】 有详细解释建立在上面的基础上,我们增加一维对每个询问增加一个维度ttt,表示询问前的最后一次修改的时间我们在回答询问的时候一定要将前ttt次修改都执行完,才能得到正确的答案参考代码 int l = 1, r = 0
2021-08-21 17:05:54
112
原创 P3709 大爷的字符串题【普通莫队】
传送门给定一个长度为NNN的数组,求区间l∼rl \sim rl∼r任意排序后,最小严格递增序列的个数(=区间众数)分析就是求l∼rl \sim rl∼r 区间的众数,离线,不修改考虑莫队增加一个数,计数器删除原来次数的出现次数,更新现在的次数,更新答案删除一个属,计数器更新原来的出现次数,跟新现在的次数,再跟新答案void add(int x) { --same[cnt[arr[x]]]; ++same[++cnt[arr[x]]]; mo = max(mo, cnt[arr[x]])
2021-08-21 16:57:17
84
原创 CF-617-E. XOR and Favorite Number【普通莫队】
给定一个长度为NNN的数组,一个整数KKK,求区间l∼rl \sim rl∼r中有多少pair{i,j},i<=jpair\{i,j\},i<=jpair{i,j},i<=j,满足ai⊕ai+1⊕...⊕aj=Ka_i \oplus a_{i+1} \oplus ... \oplus a_j=Kai⊕ai+1⊕...⊕aj=K传送门分析先考虑暴力求 ai⊕ai+1⊕...⊕aja_i \oplus a_{i+1} \oplus ... \oplus a_jai⊕ai+1⊕
2021-08-21 16:31:04
90
原创 SP3267 DQUERY - D-query【莫队】或【主席树】
传送门给定一个长度为NNN的数组,求区间 l∼rl \sim rl∼r 不同的数字分析对于此类后面出现会影响(覆盖)前面出现效果的问题需要往当前位置左边最后一次出现位置思考比如,mexmexmex 也是如此这道题求 区间mex 也是同样处理这种位置会覆盖前一个位置影响的,都考虑左边最近一个的位置静态区间在线查询 MEXMEXMEX主席树,维护最近值域出现的位置在 rrr 树上二分找值域的出现位置小于 lll 的最小值证明:假如一个数xxx 在区间 l∼rl \sim rl∼r 出现
2021-08-21 16:01:17
107
原创 P4137 Rmq Problem / mex【权值线段树】【莫队】
传送门给定长度为NNN的数组,求l∼rl \sim rl∼r 的mexmexmex(从0开始第一个没有在区间出现的数)分析这种位置会覆盖前一个位置影响的,都考虑左边最近一个的位置静态区间在线查询 MEXMEXMEX主席树,维护最近值域出现的位置在 rrr 树上二分找值域的出现位置小于 lll 的最小值证明:假如一个数xxx 在区间 l∼rl \sim rl∼r 出现过,那么它在rrr数上对应值域的值,一定是大于等于lll的推得,一个数在l∼rl \sim rl∼r区间出现过的条件是,在rr
2021-08-21 16:00:51
233
原创 2019 icpc西安邀请赛 E. Tree【树链剖分+区间异或和】
2019 icpc西安邀请赛 E. Tree【树链剖分+区间异或和】求树上简单路径的异或和【树链剖分】+【线段树】支持,修改链上的值为 a i ∣ t a_i|t ai∣t 以及 a i & t a_i\&t ai&t对位考虑,每一位建立一颗线段树,维护链上值的位情况
2021-08-14 16:56:45
169
原创 P3157 [CQOI2011]动态逆序对【CDQ分治-三维带修改】
现在给出 1 ∼ n 1 \sim n 1∼n 的一个排列,按照某种顺序依次删除 m m m 个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。CDQ分治-三维偏序【操作时间】【数字下标】【数值】操作时间优先级高,必然排在第一维,对操作时间进行排序【数字下标】和【数值】优先级相同,任选一个进行分治
2021-08-14 16:30:33
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人