主席树
文章平均质量分 52
1
kaka0010
退役ACMer/算法竞赛菜鸡
展开
-
2021牛客暑期多校训练营7 F.xay loves trees 主席树+dfs序
原题链接:https://ac.nowcoder.com/acm/contest/11258/F目录题意分析Code题意给定两棵树,要求找一个点集使得两棵树上都满足:第一棵树上点集是相互连通的,而且任意两点互为祖先节点第二棵树上任意两点都不能互为祖先节点分析首先这道题我们必须知道一个性质,一棵树上的dfs序入点和出点一定是连续的,且子树内的dfs序一定大于根节点的dfs序。这样其实就变成了我们在dfs序上找最多的连续区间,使得他们不相交。但要满足第一棵树上连续成链的性质,其实不难想到固定一原创 2021-08-07 21:22:39 · 209 阅读 · 0 评论 -
P4755 Beautiful Pair 笛卡尔树+主席树
原题链接:https://www.luogu.com.cn/problem/P4755目录题意分析Code题意分析正着考虑比较复杂,不妨逆过来思考。我们先确定每个值为最大值时可以产生的贡献是多少。显然,假设a[i]为最大值,那么在[l,r]区间里的数都必须不大于a[i],然后还要满足的条件就是这两个选中的数对必须在a[i]的两侧。如果a[i]位于x位置,那么两个数一定位于[l,x]和[x,r]中,那么我们可以遍历较小的一个区间,去找满足要求的另一个数可以取多少个。这样就变成主席树的裸题了。至于处理原创 2021-07-14 15:15:59 · 148 阅读 · 0 评论 -
P4216 [SCOI2015]情报传递 树剖+主席树
原题链接:https://www.luogu.com.cn/problem/P4216目录题意分析Code题意简单描述一下题意,有一棵树,m次操作将x节点打上标记,并且x节点的权值每回合会增加1询问x到y路径上有多少节点以及有多少节点权值大于c分析树上路径问题,一般直接想到树剖,然后考虑怎么去取值。先离线把打标记的时间记录一下,记为节点的权值,然后我们每次查询值的时候就只要查[1,t−val−1][1, t-val-1][1,t−val−1]权值的点个数就可以了,可以用主席树轻松维护。C原创 2021-07-12 16:17:03 · 100 阅读 · 0 评论 -
Codeforces Round #368 (Div. 2) D. Persistent Bookcase 主席树套bitset
原题链接:https://codeforces.ml/contest/707/problem/D题意有一个二维01矩阵,接下来有四种操作i j 将第i行第j列的数字置1i j 将第i行第j列的数字置0i 将第i行的数字翻转k 回到第k次操作之后分析看到回溯操作,主席树基本就八九不离十了。然后考虑怎么处理每行的信息。01字符变换,可以用bitset高效处理。对于主席树的每个叶子节点我们开一个bitset容器,对于123操作都可以轻松搞定,然后是计算1的个数。直接用count函数统计可能会原创 2021-07-08 18:14:40 · 86 阅读 · 0 评论 -
P3293 [SCOI2016]美味 主席树+最大异或路径
原题链接:https://www.luogu.com.cn/problem/P3293目录题意分析code题意一家餐厅有n个菜,每个菜都有评价值ai。有m位顾客,他们对菜的期望值为bi,偏好值为xi。因此第i位客人认为第j样菜品的美味程度为bixor(ai+xi)b_i xor(a_i+x_i)bixor(ai+xi),而且他们有一个选择的范围是[l,r],问他们选择的美味值最高的菜是多少。分析看到异或运算,我们很容易想到01字典树的最大异或路径,特就是假设有两个数a,b。当a的第i位是1时原创 2021-07-07 13:10:25 · 108 阅读 · 0 评论 -
P3302 [SDOI2013]森林 主席树+LCA+启发式合并
原题链接:https://www.luogu.com.cn/problem/P3302目录题意分析Code题意一个森林由n个节点m条边组成,满足下列两种操作Q x y k 查询x到y路径上权值第k小的点L x y 将x和y之间连一条边注意本题强制在线分析看到动态建边操作,很多人会想到LCT,这题应该是可以写的,但我不会 。其实这题就是P2633 Count on a tree的加强版,多了一个动态建边的过程。在那道题中,求树上路径的第k小点时,左子树的大小可以转化为siz[u]+si原创 2021-07-07 09:34:22 · 131 阅读 · 0 评论 -
Codeforces Round #276 (Div. 1) E. Sign on Fence 二分答案+主席树
原题链接:https://codeforces.ml/problemset/problem/484/E目录题意分析Code题意有一个序列[h1..hn][h1..hn][h1..hn],每次询问一个区间[l,r][l,r][l,r]所有连续w个数中的最小值最大是多少分析最小值最大问题,而且满足单调性,不难想到二分答案。然后考虑怎么转化,我们可以假设所有大于等于mid的值为1,所有小于mid的值为0,那么如果查找的区间内存在超过连续w个1,那么说明还可以进一步缩小答案。这样看来只需要处理两个问题,怎原创 2021-05-08 14:15:19 · 113 阅读 · 0 评论 -
2019牛客国庆集训派对day2 C Just h-index 二分答案+主席树
原题链接:https://ac.nowcoder.com/acm/contest/1107/C目录题意分析Code题意有一个序列[a1...an][a1...an][a1...an],每次询问一个区间[l,r][l,r][l,r],求一个值h使得区间内大于等于h的值个数不得少于h个分析根据题意,值h完全符合单调性,当h增大时,大于等于h的个数会减少,否则个数增加。那么就可以直接上二分答案了,然后考虑如何去找。由于值非常小,所以可以对每个权值建一颗树,然后这棵树上保存的点为权值小于i的点,这样我们就原创 2021-05-08 13:00:55 · 89 阅读 · 0 评论 -
Codeforces Round #457 (Div. 2) D. Jamie and To-do List 主席树
原题链接:https://codeforces.ml/contest/916/problem/D目录题意分析Code题意有四个操作set 将x的优先级修改为yremove 将x这个数移除query 查询有多少数小于x的优先级undo 撤销x次操作分析看到撤销操作应该就知道这是个主席树的题了,但撤销时需要维护两个信息,一个是相同优先级的数有几个,还有一个是当前这个数的优先级是多少,因此必须建两颗主席树,别的操作按照题意来就可以了,比较基础的主席树练习。太久没写主席了,手写错了一遍 ,下次原创 2021-05-04 23:29:58 · 109 阅读 · 0 评论 -
2021 ICPC 昆明 M Stone Games 可持久化值域线段树+动态开点+暴力
原题链接:https://ac.nowcoder.com/acm/contest/12548/M目录题意分析Code题意有n堆石子,每次可以选择一个区间,可以任意取区间内任意堆石子,问最小不能取到的石子数量是多少分析非常经典的mex问题,只不过现在可以取任意堆石子。我们考虑一个问题,如何使得答案的上限增加。假设当前可以取到的石子个数是[1,x],那么我们下次加入石子数在[1,x+1]之内的石子都可以增加上限,比如[1,x+1]之内石子数的和为sum,那么当前可以取到的石子范围就是[1,sum],原创 2021-04-09 10:23:53 · 205 阅读 · 0 评论 -
HDU 5790 Prefix 字符串哈希+主席树
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5790目录题意分析题意给定n个字符串,然后m次询问,每次询问给出l,r代表在第l和第r个串之间本质不同的前缀有多少个分析本题是要求强制在线的,因此只能考虑主席树维护历史版本,但这题与普通主席树有些不同,需要自己变形一下。我们记录一下每个字符串的前缀对当前状态的贡献,例如当前前缀在之前版本出现过,我们加上当前版本的贡献,再减去上个出现过版本的贡献。最后求[l,r]区间实质就是求r版本[l,r]上的和。至原创 2021-03-27 10:59:36 · 140 阅读 · 0 评论 -
Super Mario HDU 4417 (二分主席树 or 分块)
简单题意:给定一个长度为n的序列,有m次查询,要求算出在[L, R]的区间内,小于k值的个数有几个。分析:数据在1e5左右,很明显想到的是主席树的结构,维护区间的信息。因为通过主席树我们可以直接查出第k大值,而且根据主席树是权值线段树的性质,符合单调的性质,所以可以二分第几大的数去逼近k值,最后算出位置就说明前面有多少数字比他小。#include <iostream>#include <algorithm>#include <cstdio>#include &l原创 2020-11-18 16:53:51 · 171 阅读 · 1 评论