
【数据结构】树状数组
文章平均质量分 83
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ3196】【TYVJ1730】二逼平衡树
【题目链接】点击打开链接【思路要点】用外层树状数组套内层权值线段树,那么每一个区间对应的权值线段树可以表示为\(O(LogN)\)棵线段树的和(差)。那么在得到的线段树上二分即可在\(O(LogNLogV)\)的时间内解决题目中所给出的询问。注意修改仅涉及单点修改,那么至多会修改\(O(LogN)\)棵线段树,即修改的时间复杂度为\(O(LogNLo原创 2018-01-15 09:56:16 · 341 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 098 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】Attention【思路要点】用前/后缀和分别统计头领在每个位置时前后需要转向的人数。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 300005;template <typename T> void chk...原创 2018-06-08 13:44:31 · 532 阅读 · 0 评论 -
【BZOJ3038】上帝造题的七分钟2
【题目链接】 点击打开链接 【思路要点】 补档博客,无题解。 【代码】 #include<bits/stdc++.h>using namespace std;#define MAXN 100005template <typename T> void read(T &x) { x = 0; i...原创 2018-09-05 16:25:50 · 247 阅读 · 0 评论 -
【CodeForces】CodeForces Round #406 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Berzerk【思路要点】博弈搜索,将状态按先后手拆点,建出游戏图。若一个点存在出边指向必败态,则该点为必胜态。若一个点所有出边指向必胜态,则该点为必败态。不满足上述两点的点为平局态。用一个类似拓扑排序的过程实现即可。时间复杂度 O(N2)O(N^2)O(N2) 。【代码】#inclu...原创 2018-09-27 18:13:18 · 354 阅读 · 0 评论 -
【LOJ2322】「清华集训 2017」Hello world!
【题目链接】点击打开链接【思路要点】一个 101310^{13}1013 以内的数开根 666 次后一定会变成 111 ,因此有效的修改次数不会超过 6N6N6N 。设定一个阈值 α\alphaα ,若 k≥αk≥\alphak≥α ,则暴力进行询问或修改,借助长链剖分求 kkk 级祖先,单次操作时间复杂度为 O(Nα)O(\frac{N}{\alpha})O(αN) 。考...原创 2018-09-28 11:19:32 · 660 阅读 · 0 评论 -
【CodeForces】CodeForces Round #530 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Sum in the tree【思路要点】题目中给出的限制条件相当于限定了所有深度为奇数的点及其父亲的权值和,显然,将深度为偶数的非叶节点的权值设置得尽可能大有利于减少全局权值和。时间复杂度 O(N)O(N)O(N) 。【代码】#include&lt;bits/stdc++.h&gt;usi...原创 2019-01-20 11:30:34 · 651 阅读 · 0 评论 -
【USACO】2018 December Contest, Platinum题解
**【T1】**Balance Beam【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑一个指数暴力,首先枚举每一个位置选择操作 111 还是操作 222 。记 EiE_iEi 表示从 iii 出发的期望收益。若在 iii 处选择操作 222 ,那么 Ei=AiE_i=A_iEi=Ai ,否则,令 iii 之前第一个选择操作 222 的点为 ...原创 2019-01-20 17:42:23 · 789 阅读 · 1 评论 -
【USACO】2019 February Contest, Platinum题解
**【T1】**Cow Dating【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑如何快速计算一个区间 [l,r][l,r][l,r] 的价值。定义二元组 (x,y)(x,y)(x,y) 来描述一个区间, xxx 表示区间中恰好有一个关键点的概率, yyy 表示区间中没有关键点的概率。显然,对于两个区间 (x1,y1),(x2,y2)(x_1,y...原创 2019-02-27 10:33:59 · 1335 阅读 · 1 评论 -
【LOJ6411】「ICPC World Finals 2018」三角形
【题目链接】点击打开链接【思路要点】不失一般性地,我们考虑计算倒三角的个数。考虑枚举其靠下的顶点 (x,y)(x,y)(x,y) ,记其向左斜向上的边最长长度为 lx,yl_{x,y}lx,y ,向右斜向上的边最长长度为 rx,yr_{x,y}rx,y ,那么该顶点处至多产生 Min{lx,y,rx,y}Min\{l_{x,y},r_{x,y}\}Min{lx,y,rx,...原创 2019-03-21 18:19:06 · 379 阅读 · 0 评论 -
【校内训练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 评论 -
【省内训练2019-06-02】互膜
【思路要点】记 aia_iai 为卡牌的当前价值, Mini=Min{ai,ai+1,…,aN}Min_i=Min\{a_i,a_{i+1},\dots,a_N\}Mini=Min{ai,ai+1,…,aN} 。引理: Ans=Min1+∑i≡1 (mod 2)Max{ai,Mini+1}Ans=Min_1+\sum_{i\equiv1\ (mod\ 2)}M...原创 2019-06-04 17:00:39 · 293 阅读 · 0 评论 -
【LOJ2251】「ZJOI2017」树状数组
【题目链接】点击打开链接【思路要点】考虑 Add(x)Add(x)Add(x) 何时会对 Find(y)Find(y)Find(y) 产生影响。不难发现,当且仅当 x≥yx\geq yx≥y , Add(x)Add(x)Add(x) 会对 Find(y)Find(y)Find(y) 产生影响。因此 Find(y)Find(y)Find(y) 实际上维护了数组的后缀和。对于询...原创 2019-06-22 14:43:39 · 316 阅读 · 0 评论 -
【CodeForces】CodeForces Round #483 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接【Div.2 A】Game【思路要点】排序,取中位数为答案。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> void chkmax(T ...原创 2018-05-17 14:30:35 · 342 阅读 · 0 评论 -
【BZOJ4481】【JSOI2015】非诚勿扰
【题目链接】点击打开链接【思路要点】用等比数列求和公式求出每条边出现的概率。对于每一条边,用树状数组统计与它交叉的边的出现概率和,计算答案即可。时间复杂度\(O(NLogN)\)(\(N\),\(M\)同阶)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 500005;template <ty...原创 2018-04-20 19:44:54 · 507 阅读 · 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 评论 -
【BZOJ3262】陌上花开
【题目链接】点击打开链接【思路要点】直观地来想,本题可以先排序一维,然后使用二维数据结构(树套树,KD-Tree)来解决。时间复杂度\(O(NLog^{2}N)\)或\(O(N\sqrt{N})\)。或者也可以用CDQ分治来解决本题,时间复杂度同样为\(O(NLog^{2}N)\)。其中树套树的空间复杂度高达\(O(NLog^{2}N)\),粗糙的实原创 2018-01-16 10:34:49 · 492 阅读 · 0 评论 -
【CodeForces】Educational Codeforces Round 37 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】Water The Garden【思路要点】按照题意模拟,或者简单计算一下均可。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 5005;template <typename T> void read(T &...原创 2018-02-12 21:08:20 · 470 阅读 · 0 评论 -
【BZOJ3813】【UOJ38】【清华集训2014】奇数国
【题目链接】BZOJUOJ【思路要点】首先,有一个直观的做法是对每一个质因子维护一棵树状数组,记录区间中该质因子指数的和。询问时先将\(product\)质因数分解的结果求出来,再用快速幂计算欧拉函数。时间复杂度是\(O(60NLogN)\),可以在UOJ上通过,但在BZOJ上会超时。进一步考虑,由于19961993是质数,我们可以方便地计算各个质因数的乘法逆元。所以我们用一颗线段树维护区间取模乘...原创 2018-02-27 09:55:19 · 393 阅读 · 0 评论 -
【USACO】2018 January Contest, Platinum题解
【比赛经历】先看完题,准备按顺序做。T1先写了一个\(O(NK^{2})\)的DP,交一发,得分8/10。仔细一想,\(O(NK)\)的做法好像可行,但稍微有点难写,决定卡常+骗分。把Max换成If语句,给循环变量加上人register,得分9/10。4次提交后,发现T的那个测试点满足\(K≥90\)、\(N≥80000\),针对性地骗分后,得到满分。此时时间刚过1h。T2想了一段原创 2018-02-07 10:45:13 · 1151 阅读 · 0 评论 -
【CodeForces204E】Little Elephant and Strings
【题目链接】点击打开链接【思路要点】建立多串的后缀树,如果一个节点的子树内出现超过K种字符串的结尾,那么这个节点的父边上所有的字符串是合法的,这个节点的父边上字符串的个数就是这个节点的深度减去其父亲的深度,否则记为0。判断一个节点的子树内是否出现超过K种字符串的结尾可以将后缀树进行DFS序重标号,问题就转化为了求一些区间内颜色的种类数。将询问按左端点排序,用离线询问+树状数组解决即可。完成判断后进...原创 2018-03-15 13:24:09 · 488 阅读 · 0 评论 -
【CodeForces】CodeForces Round #467 (Div. 1 + Div. 2) 题解
【比赛链接】Div.1Div.2【题解链接】点击打开链接【Div.2 A】Olympiad【思路要点】答案为原数集中除去所有0以外数的种类数,哈希计数即可。时间复杂度\(O(N+Max\{a_i\})\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 1005;template <typena...原创 2018-03-05 20:29:18 · 376 阅读 · 0 评论 -
【BZOJ3529】【SDOI2014】数表
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXQ 20005#define MAXN 100005struct query {int n, m, a, home; };struct info {long long value; int home; };...原创 2018-03-13 12:41:09 · 226 阅读 · 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 评论 -
【BZOJ2253】纸箱堆叠
【题目链接】点击打开链接【思路要点】树套树,KDTree,CDQ分治都能做。CDQ分治的话需要注意这里要求“严格小于”,取中点时应当保证左右两边第一维坐标不会相等。时间复杂度\(O(NLog^2N)\)或\(O(N\sqrt{N})\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;t...原创 2018-03-25 18:07:12 · 426 阅读 · 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 评论 -
【BZOJ2819】Nim
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 500005#define MAXLOG 20struct Binary_Index_Tree { int value[MAXN], n; void modify(int x, int y, int v...原创 2018-04-16 18:25:49 · 261 阅读 · 0 评论 -
【BZOJ4855】【JSOI2016】轻重路径
【题目链接】点击打开链接【思路要点】考虑将问题离线,将删点变成加点。由题,一条从任意一个点到根的路径上至多有\(O(LogN)\)条轻边,而加入一个点不会使其到根路径上的重边变成轻边,因此加入一个点至多改变\(O(LogN)\)个点的轻重划分。对原树进行树链剖分,用树状数组支持询问某一个点当前的子树大小以及一条原树重链上轻边的位置。每加入一个点后找到该点到根路径上所有的轻边,并更新它们即可。还有一...原创 2018-04-13 20:03:22 · 866 阅读 · 0 评论 -
【LOJ3175】「IOI2019」排列鞋子
【题目链接】点击打开链接【思路要点】令最后第 iii 只鞋子的位置到了 aia_iai ,那么交换次数即为 aia_iai 的逆序对数。因此,我们希望最小化的即为 aia_iai 的逆序对数。由于题目要求最终大小相同的鞋子相邻,因此需要对鞋子进行配对,显然将相同大小的鞋子按照出现顺序配对是最优的。考虑在最终的排列方案中相邻的两对鞋子 (a,b),(c,d)(a,b),...原创 2019-08-13 15:49:08 · 1329 阅读 · 0 评论