
【算法】离线操作
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【CodeForces204E】Little Elephant and Strings
【题目链接】点击打开链接【思路要点】建立多串的后缀树,如果一个节点的子树内出现超过K种字符串的结尾,那么这个节点的父边上所有的字符串是合法的,这个节点的父边上字符串的个数就是这个节点的深度减去其父亲的深度,否则记为0。判断一个节点的子树内是否出现超过K种字符串的结尾可以将后缀树进行DFS序重标号,问题就转化为了求一些区间内颜色的种类数。将询问按左端点排序,用离线询问+树状数组解决即可。完成判断后进...原创 2018-03-15 13:24:09 · 488 阅读 · 0 评论 -
【CodeChef】September Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【ANDSQR】**AND Square Subsegments【思路要点】离线询问,按左端点排序。枚举区间的左端点 lll ,区间 [l,i][l,i][l,i] 的 andandand 和至多变化 O(LogV)O(LogV)O(LogV) 次,二分找到分界点,并找到其中是完全平方数的。每一段 andandand 和相同的区间 [l,i][l...原创 2018-10-06 16:04:18 · 362 阅读 · 0 评论 -
【省内训练2018-10-28】排序二叉树
【思路要点】若将一个序列按照元素大小排序,那么其对应的排序二叉树即为插入时间对应的笛卡尔树,并且,被删除的元素可以视作插入时间为正无穷的元素。一个点在排序二叉树上所有的祖先即其左侧/右侧对应的所有插入时间为后/前缀最小值的点。离线操作,对权值离散化,并用线段树维护。对于一个修改 iii ,在其对应区间的左端点将对应元素的插入时间改为 iii ,在出右端点后将对应元素的插入时间改为正无穷...原创 2018-10-30 15:02:33 · 278 阅读 · 0 评论 -
【CodeChef】Count on a Treap
【题目链接】点击打开链接【思路要点】若将一个序列按照元素大小排序,那么其对应的 TreapTreapTreap 即为权值对应的笛卡尔树,并且,被删除的元素可以视作权值为 000 的元素。一个点在 TreapTreapTreap 上所有的祖先即其左侧/右侧对应的所有权值为后/前缀最大值的点。离线操作,对权值离散化,并用线段树维护。插入删除操作可以通过线段树的单调修改实现。对...原创 2018-10-30 18:20:05 · 376 阅读 · 0 评论 -
【省内训练2018-11-23】Graph
【思路要点】离线询问,为每一条边找到一个删除时间。将过程倒过来,按照删除时间倒序加入每一条边。我们将加入的边分为两类,加入后连接两个不同的联通块的称为树边,剩余的边称为非树边。显然,树边的加入不会产生新的双连通分量,因此,我们可以预先将所有的树边加入图中,并处理出形成的森林中每个节点的深度等信息。之后,我们每加入一条非树边,就会将森林中一条树链上所有的节点合并起来,可以通过并查集实现...原创 2018-11-24 16:58:31 · 299 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 1 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Parity【思路要点】分 bbb 的奇偶性讨论即可。时间复杂度 O(k)O(k)O(k) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long long l...原创 2019-02-14 13:55:38 · 919 阅读 · 2 评论 -
【校内训练2019-03-17】胖
【思路要点】离线操作,我们需要求出各城市破产的时间来回答询问。考虑二分答案,我们需要能够回答形如 “ xxx 城市在 yyy 时刻遭受的损失” 的问题。对于一个修改,我们可以将其拆分为在 O(LogV)O(LogV)O(LogV) 个节点处向下传导至多 O(LogV)O(LogV)O(LogV) 层的损失,在询问时我们只需查询其至多 O(LogV)O(LogV)O(LogV) 个祖先对对...原创 2019-03-19 14:34:48 · 241 阅读 · 0 评论 -
【校内训练2019-03-26】动态半平面交
【思路要点】考虑将 pkp^kpk 的贡献拆分为 p,p2,p3,...,pkp,p^2,p^3,...,p^kp,p2,p3,...,pk 分别的贡献,每一个数若在范围内出现,对答案产生 ×p\times p×p 的贡献,重复出现统计一次。考虑询问 x,yx,yx,y ,它实际上考虑了 xxx 子树内所有深度不超过 depthx+ydepth_x+ydepthx+y 的点,因此,若将询...原创 2019-03-27 14:42:45 · 728 阅读 · 0 评论 -
【BZOJ4231】回忆树
【题目链接】点击打开链接【思路要点】分开处理路径上竖直的字符串和在 LcaLcaLca 处拐弯的字符串。在 LcaLcaLca 处拐弯的字符串总数在 O(∑∣S∣)O(\sum|S|)O(∑∣S∣) 级别,可以直接 KmpKmpKmp 判断。竖直的字符串可以在离线询问后通过 ACACAC 自动机和树状数组处理。时间复杂度 O(NLogN+MLogN+∑∣S∣)O(NLogN...原创 2019-04-22 14:54:01 · 584 阅读 · 0 评论 -
【LOJ3059】「HNOI2019」序列
【题目链接】点击打开链接【思路要点】没有修改的做法在《IOI2018中国国家候选队论文集——浅谈保序回归问题》中有所介绍。具体做法如下:(1)(1)(1) 、注意到若所有 BiB_iBi 均相等,最小化 ∑i=1N(Ai−B)2=∑i=1NAi2−2AiB+B2\sum_{i=1}^{N}(A_i-B)^2=\sum_{i=1}^{N}A_i^2-2A_iB+B^2∑i=1...原创 2019-04-24 17:01:02 · 1168 阅读 · 0 评论 -
【CodeForces】CodeForces Round #562 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Increasing by Modulo【思路要点】二分答案,贪心判断。时间复杂度 O(NLogM)O(NLogM)O(NLogM) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 3e5 + 5;t...原创 2019-05-28 15:13:38 · 452 阅读 · 0 评论 -
【省内训练2019-06-06】正方形
【思路要点】求出各个点为右下角的矩形的最大值。将询问离线并排序,按照 www 从大到小处理,用并查集支持查询即可。时间复杂度 O(NMα+Q)O(NM\alpha+Q)O(NMα+Q) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 1e3 + 5;const int MAXM ...原创 2019-06-10 16:54:04 · 209 阅读 · 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 · 998 阅读 · 1 评论 -
【CodeForces】AIM Tech Round 5 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Find Square 【思路要点】 答案即为所有黑色方格坐标的平均值。 时间复杂度O(N∗M)O(N∗M)O(N*M)。 【代码】 #include&lt;bits/stdc++.h&gt;using namespace std;c...原创 2018-08-29 15:40:09 · 400 阅读 · 0 评论 -
【BZOJ2333】【SCOI2011】棘手的操作
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 300005#define INF 1e9struct Node { int lc, rc; int maxnum, tag;};Node a[MAXN * 2];int n, q, timer,...原创 2018-03-19 14:03:24 · 243 阅读 · 0 评论 -
【BZOJ3110】【ZJOI2013】K大数查询
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】//树套树#include<bits/stdc++.h>using namespace std;#define MAXN 50005#define UTRAL 16000005struct Node {int lc,rc,tag;long long len,sum;};int n,m,N,size,BIT[MAX...原创 2018-03-23 20:50:19 · 207 阅读 · 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 · 380 阅读 · 0 评论 -
【BZOJ4537】【HNOI2016】最小公倍数
【题目链接】点击打开链接【思路要点】首先对所有边按照\(A\)值排序,并分块。对于每个块,我们处理\(A\)值在该块内的询问。假设我们正在处理第\(i\)块,那么我们将第1到\(i-1\)块的边取出,并按\(B\)排序,然后按\(B\)从小到大的顺序处理本块内需要处理的询问。当处理一个询问时,先加入\(B\)值比它小的边,用并查集维护联通性与联通块内\(A\)和\(B\)的最大值。然后我们可能要额...原创 2018-03-20 15:42:01 · 353 阅读 · 0 评论 -
【BZOJ4540】【HNOI2016】序列
【题目链接】点击打开链接【思路要点】询问一个区间内不方便用线段树维护信息,可离线,考虑莫队。这样的话,我们希望支持快速询问\(f(l,r)=\sum_{i=l}^{r}Min_{j=l}^{i}\{a_i\}\)和\(g(l,r)=\sum_{i=l}^{r}Min_{j=i}^{r}\{a_j\}\)。用单调栈处理出每个数向左/向右第一个小于它的数,并倍增。询问时在倍增数组上二分,可以得到\(O...原创 2018-03-20 19:57:46 · 277 阅读 · 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 · 216 阅读 · 0 评论 -
【CodeForces666E】Forensic Examination
【题目链接】点击打开链接【思路要点】这个题写得我很爽啊。想法其实不难,建立多串后缀树,然后将询问离线,用线段树合并来回答询问。后缀的前缀是子串,母串的一个子串可以通过从后缀树上某个表示母串对应后缀的节点向上倍增得到。时间复杂度\(O(|S|Log|S|)\)(\(|S|\),\(Q\),\(M\),\(\sum|T|\)同阶)。【代码】#include<bits/stdc++.h>u...原创 2018-03-31 11:15:35 · 396 阅读 · 0 评论 -
【BZOJ4855】【JSOI2016】轻重路径
【题目链接】点击打开链接【思路要点】考虑将问题离线,将删点变成加点。由题,一条从任意一个点到根的路径上至多有\(O(LogN)\)条轻边,而加入一个点不会使其到根路径上的重边变成轻边,因此加入一个点至多改变\(O(LogN)\)个点的轻重划分。对原树进行树链剖分,用树状数组支持询问某一个点当前的子树大小以及一条原树重链上轻边的位置。每加入一个点后找到该点到根路径上所有的轻边,并更新它们即可。还有一...原创 2018-04-13 20:03:22 · 866 阅读 · 0 评论 -
【BZOJ2594】【WC2006】水管局长数据加强版
【题目链接】点击打开链接【思路要点】若题目仅包含询问操作,显然我们只需保留一棵图的最小生成树,在树上询问两点间边权的最大值即可。而本题中多了一种删边操作,但没有强制在线,因此,我们可以将操作离线,转化为加边操作。用LinkCutTree维护动态最小生成树即可。时间复杂度\(O((M+Q)LogN)\)。【代码】#include<bits/stdc++.h>using namespac...原创 2018-01-17 20:26:23 · 271 阅读 · 0 评论 -
【BZOJ5036】【JSOI2014】回文串
【题目链接】点击打开链接【思路要点】在每两个字符间插入#(例如:“AAB”\(\Rightarrow\)“#A#A#B#”)。用Manacher算法求出上述字符串每个字符为中心的最长回文子串的长度\(l_i\)。记\(len_i=\frac{l_i+1}{2}\),不难发现\(len_i\)即为只算一边的字符时最长回文子串的长度,也即回文串的个数。现在考虑每一个询问\([L,R]\),我们将其变为...原创 2018-04-24 21:09:53 · 411 阅读 · 0 评论 -
【BZOJ5077】【UOJ198】【CTSC2016】时空旅行
【题目链接】BZOJUOJ【思路要点】我们发现所有星球的\(y\)和\(z\)坐标没有实质作用,问题仅和\(x\)和\(c\)有关。令询问给出的横坐标为\(qx\),那么一个属性为\((x,c)\)的星球被探索的代价为\((qx-x)^2+c=qx^2-2x*qx+(x^2+c)\)。显然\(qx^2\)只和询问有关,因此我们需要求\(-2x*qx+(x^2+c)\)的最小值,令\(k=-2x,b...原创 2018-06-04 13:38:24 · 309 阅读 · 0 评论 -
【省内训练2019-06-29】Coins
【思路要点】首先先说一下笔者在考场上的复杂度较高的做法。不难发现一次扭蛋或使用 111 枚银币,或使用 xxx 枚金币,且 xxx 不会重复。考虑枚举金币的使用方式,则可以得到一系列只使用金币就可以表示出来的数 a1,a2,…,an (ai<ai+1)a_1,a_2,\dots,a_n\ (a_i<a_{i+1})a1,a2,…,an ...原创 2019-06-29 20:59:26 · 400 阅读 · 0 评论