【算法】线段树合并
文章平均质量分 88
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ2733】【HNOI2012】永无乡
【题目链接】点击打开链接【思路要点】线段树合并裸题。时间复杂度\(O(NLogN+QLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 200005;const int MAXP = 10000005;template <typename T> void chkmax(T &...原创 2018-03-15 17:34:19 · 261 阅读 · 0 评论 -
【LOJ3046】「ZJOI2019」语言
【题目链接】点击打开链接【思路要点】考虑枚举最终路径的一端 xxx ,那么路径的另一端 yyy 应当在所有过 xxx 的路径的并上,也即这些路径两端所有点形成的虚树上,因此,我们需要知道这个虚树的大小。注意到虚树大小即为将点按照 dfsdfsdfs 序环形排列后相邻的点在原树上距离和的一半,可以用线段树维护 dfsdfsdfs 序,记录区间最左、最右侧的点,以及区间相邻点的距离...原创 2019-06-14 16:42:27 · 686 阅读 · 0 评论 -
【LOJ2553】「CTSC2018」暴力写挂
【题目链接】点击打开链接【思路要点】考虑计算 2depth(x)+2depth(y)−2(depth(Lca(x,y))−depth′(Lca′(x,y)))2depth(x)+2depth(y)-2(depth(Lca(x,y))-depth'(Lca'(x,y)))2depth(x)+2depth(y)−2(depth(Lca(x,y))−...原创 2019-04-20 14:13:43 · 360 阅读 · 0 评论 -
【LOJ2865】「IOI2018」狼人
【题目链接】 点击打开链接 【思路要点】 问题等价于从起点出发只经过 L,L+1,L+2,...,NL,L+1,L+2,...,NL,L+1,L+2,...,N 能够到达的点和终点出发只经过 1,2,3,...,R1,2,3,...,R1,2,3,...,R 能够到达的点是否有交。 建出原图的最小/最大生成树的 KruskalKruskalKruskal ...原创 2018-09-17 13:09:21 · 972 阅读 · 1 评论 -
【CodeForces】Educational Codeforces Round 47 题解
【比赛链接】 点击打开链接 【题解链接】 点击打开链接 **【A】**Game Shopping 【思路要点】 按照题意模拟。 时间复杂度 O(N)O(N) O(N) 。 【代码】 #include&lt;bits/stdc++.h&gt;using namespace std;const int...原创 2018-08-30 13:15:24 · 319 阅读 · 0 评论 -
【CodeForces】CodeForces Round #476 (Div. 2) 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】Paper Airplanes【思路要点】按照题意计算即可。时间复杂度\(O(1)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> void chkmax(T &x,...原创 2018-05-01 19:28:18 · 269 阅读 · 0 评论 -
【BZOJ4730】Alice和Bob又在玩游戏
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 100005#define MAXP 20000005#define MAXLOG 20vector <int> a[MAXN];int sg[MAXN], n, m, root[MAXN]...原创 2018-04-13 20:12:11 · 1977 阅读 · 0 评论 -
【BZOJ5253】【2018多省省队联测】制胡窜
【题目链接】点击打开链接【思路要点】首先,一个询问的答案只和询问串的在主串中所有出现的位置有关。直接求解所有出现位置显然会超时,一种可行的方法是用离线询问+后缀自动机(树)+线段树合并来维护出现位置的右端点集合。先解决一个小问题:定位一个询问可以在后缀树上倍增在\(O(LogN)\)的时间内完成。现在我们有了一棵维护着所有询问串出现位置的右端点的线段树,考虑如何得到答案。考虑计算出所有的两个断点把...原创 2018-04-10 17:32:40 · 947 阅读 · 2 评论 -
【BZOJ4919】【Lydsy1706月赛】大根堆
【题目链接】点击打开链接【思路要点】显然有\(O(N^2)\)的DP,用线段树维护每一个点的DP数组,用线段树合并支持转移。注意DP数组是单调的,可以将区间取最大值操作看做区间赋值操作。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;const in...原创 2018-04-02 15:13:58 · 368 阅读 · 0 评论 -
【BZOJ3277】串
【题目链接】点击打开链接【双倍经验链接】【BZOJ3473】字符串【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 200005#define MAXL 100005struct Suffix_Automaton { map <char, int> child[MA...原创 2018-03-31 11:20:25 · 204 阅读 · 0 评论 -
【CodeForces666E】Forensic Examination
【题目链接】点击打开链接【思路要点】这个题写得我很爽啊。想法其实不难,建立多串后缀树,然后将询问离线,用线段树合并来回答询问。后缀的前缀是子串,母串的一个子串可以通过从后缀树上某个表示母串对应后缀的节点向上倍增得到。时间复杂度\(O(|S|Log|S|)\)(\(|S|\),\(Q\),\(M\),\(\sum|T|\)同阶)。【代码】#include<bits/stdc++.h>u...原创 2018-03-31 11:15:35 · 375 阅读 · 0 评论 -
【BZOJ3473】字符串
【题目链接】点击打开链接【双倍经验链接】【BZOJ3277】串【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 200005#define MAXL 100005struct Suffix_Automaton { map <char, int> child[MAXN...原创 2018-03-29 20:36:59 · 362 阅读 · 0 评论 -
【BZOJ3307】雨天的尾巴
【题目链接】点击打开链接【思路要点】路径\((x,y)\)可以看做路径\((x,root)\)+路径\((y,root)\)-路径\((Lca,root)\)-路径\((father_{Lca},y)\)。依据这一点进行树上差分和线段树合并即可。时间复杂度\(O(NLogN)\)(\(N\)、\(M\)同阶)。【代码】#include<bits/stdc++.h>using name...原创 2018-03-15 19:38:48 · 510 阅读 · 0 评论 -
【LOJ2722】「NOI2018」情报中心
【题目链接】点击打开链接【思路要点】考虑特殊性质 S2S2S2 ,如下图,可以发现两条蓝-绿路径形成的链并的大小的两倍为 两条链长之和 +++ 蓝点之间的距离 +++ 绿点之间的距离 。枚举蓝点的 LcaLcaLca ,即图中的红点,那么我们需要选出两个不属于同一个红点的子树的蓝点 a,ba,ba,b ,使得它们对应的绿点 pa,pbp_a,p_bpa,pb 满足最大的总...原创 2019-06-27 20:33:28 · 742 阅读 · 0 评论