随笔分类 - 数据结构
摘要:函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作。 显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分。 时间复杂度 \(O(q\log n)\)。 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作。 显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分。 时间复杂度 \(O(q\log n)\)。 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:考虑到正向求解困难,于是正难则反。 那么实际上对于 \(a_i\) 和 \(a_{i+1}\) 来说,它们给答案的贡献就是满足 \(l_j>a_i,r_j<a_{i+1}\) 的区间数量。 那么就是经典转化了。直接转换为二维数点问题即可。时间复杂度 \(O(tn\log V)\),离散化可以将 \(
阅读全文
摘要:相当套路而巧妙的构造。 假如我们对于横纵坐标构造二分图,然后用如下方法连边: 对于点 \((x,y)\),连接 \(x,y\)。 那么对于一个有 \(num_x\) 个横坐标点和 \(num_y\) 个纵坐标点的连通块,它所产生的贡献就是 \(num_x\times num_y\)。 这玩意儿需要联
阅读全文
摘要:相当套路而巧妙的构造。 假如我们对于横纵坐标构造二分图,然后用如下方法连边: 对于点 \((x,y)\),连接 \(x,y\)。 那么对于一个有 \(num_x\) 个横坐标点和 \(num_y\) 个纵坐标点的连通块,它所产生的贡献就是 \(num_x\times num_y\)。 这玩意儿需要联
阅读全文
摘要:模版题的升级了。 使用二分图经典判定方法(一个点拆成两个点 \(x,x+n\),连边 \((x,y)\) 就是连接 \((x,y+n),(x+n,y)\),那么是否是二分图就等价于判断 \(x,x+n\) 是否都不在一个集合内),预处理出每个操作的 \(e_i\) 下一次出现的位置 \(nx_i\)
阅读全文
摘要:模版题的升级了。 使用二分图经典判定方法(一个点拆成两个点 \(x,x+n\),连边 \((x,y)\) 就是连接 \((x,y+n),(x+n,y)\),那么是否是二分图就等价于判断 \(x,x+n\) 是否都不在一个集合内),预处理出每个操作的 \(e_i\) 下一次出现的位置 \(nx_i\)
阅读全文
摘要:注意力惊人的注意到我们可以将问题转化为所有联通块大小全部为偶数。 假如已经确认了所有加入的边,那么我们可以通过类似 \(K\) 算法的方式求解。 考虑到答案单调不升,所以每条边都有一个影响的区间。考虑线段树分治。 我们倒序枚举,遇到要加入的边,若当前时间为 \(t\),边的加入时间为 \(t'\),
阅读全文
摘要:注意力惊人的注意到我们可以将问题转化为所有联通块大小全部为偶数。 假如已经确认了所有加入的边,那么我们可以通过类似 \(K\) 算法的方式求解。 考虑到答案单调不升,所以每条边都有一个影响的区间。考虑线段树分治。 我们倒序枚举,遇到要加入的边,若当前时间为 \(t\),边的加入时间为 \(t'\),
阅读全文
摘要:\(NOIP\) 考前祈福。 实际上,每种伤害 \(d\) 打出的亵渎次数可以转化为: \[1+\max\limits_{i=0}^{\lceil\frac{n}{d}\rceil}(i[\sum\limits_{j=1}^{i}[sum(jd-d+1,jd)>0]=i]) \]其中 \(sum(i
阅读全文
摘要:一、线段树分裂 类似于 \(FHQ-Treap\) 的方式,下给出模板题代码。 //Luogu5494 #include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+5,M=5e6+5; int
阅读全文
摘要:1.什么是可持久化 对应的具体问题就是给你一个可以用普通数据结构(如线段树、平衡树等)解决的问题,但是操作可能会在历史版本上进行。 由于主席树笔者曾经写过,所以这里跳过。 2.可持久化平衡树 思想很简单。众所周知,\(FHQ-Treap\) 是个好东西,他就可以用来写可持久化平衡树。 考虑 \(sp
阅读全文
摘要:好题好题,太棒了这题! 直接想是十分困难的,你连 \(dp\) 状态都想不出合理的,因此考虑二分答案,转化成一个判定问题。下文 \(d\) 表示二分出的答案。 设 \(sum_i\) 表示 \(i\) 子树内的合法路径数,那他就一共分为两部分: 来自于 \(sum_{son}\),直接累加即可。 经
阅读全文
摘要:最小值最大,考虑二分答案,问题转为判断最小值是否能 \(\ge x\)。 假如 \(a_i\ge x\),那我们肯定不管;假如 \(a_i<x\),那最好能让选择的区间 \(r\) 值更大,用优先队列维护即可。区间增幅可以用树状数组维护。 时间复杂度 \(O(n\log^2n)\)。 #includ
阅读全文
摘要:好题好题。 难点在建图,因为图的边数将会决定最小生成树的时间复杂度。我们肯定希望能够只建 \(O(n)\) 级别的边,这样时间复杂度就可以做到 \(O(n\log n)\)。 观察到当 \(i,j,k\) 三个区间能够互相连边时(这里假设 \(a_i<a_j<a_k\)),我们绝对不会连 \((i,
阅读全文
摘要:CSP 前学习珂学,祝自己 \(while(1)\ rp++\)。 考虑求解出每种数对答案的贡献。 设 \(t=r-l+1,k_x=\sum\limits_{i=l}^r [a_i=x]\),由容斥得贡献为 \(x(2^t-2^{t-k_x})\)。 求解 \(k_x\),考虑莫队,时间复杂度为 \
阅读全文
摘要:前言 在日常的学习生活中,我们经常会遇到如下问题: 维护一个数据结构,可以插入或删除一个数、求该数排名、求排名给定的数、求一个数的前驱后继。 这种情况下,权值线段树可以不优雅的解决这个问题。为了找到更优雅、适应性更强的算法,人们发明了平衡树。平衡树已经渗透入大部分 \(OIer\) 的代码中。对于一
阅读全文
摘要:众所周知,\(Li\ Chao\ Tree=LCT=Link\ Cut\ Tree\)。 在我们的日常学习生活中,经常会遇到以下问题: 维护一种数据结构,要求: 添加一条线段 求解 \(x=k\) 与所有线段交点中,\(y\) 最大的一个。 众所周知,线段会影响一个区间的答案。区间取 \(max+\
阅读全文
摘要:珂朵莉树+树链剖分+BIT+ST表。
阅读全文
摘要:珂朵莉树+树链剖分+BIT+ST表。
阅读全文