随笔分类 -  I-数据结构-树状数组

摘要:Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef double db; typedef long 阅读全文
posted @ 2018-09-13 09:28 NewErA 阅读(253) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 按值大小插入后用树状数组统计两边个数 #include <bits/stdc++.h> using namespace std; #define X first #define Y second #define pb push_back typedef double db; 阅读全文
posted @ 2018-09-13 09:13 NewErA 阅读(204) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 对于每一条分割线,设本不应在其左侧的个数为$x$ 重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去 这样就转直接用树状数组求出最大的$x$即可 #include <bits/stdc++.h> using namespace std; #def 阅读全文
posted @ 2018-09-09 20:40 NewErA 阅读(247) 评论(0) 推荐(0)
摘要:Link: BZOJ 3196 传送门 Solution: 最直观的的思路是用线段树套平衡树 不过一看到区间第$k$大就又忍不住去写最近刚练的带修改主席树了 感觉自己数据结构题灵活变通的能力还不够强啊,一开始$naive$得觉得不好算排名…… 区间第$k$大和修改的操作和$Dynamic Ranki 阅读全文
posted @ 2018-07-25 22:36 NewErA 阅读(170) 评论(0) 推荐(0)
摘要:Link: BZOJ 1878 传送门 Solution: 很久以前这道题我是用$BIT$过的 思路非常简单:离线将询问排序,记录每个点同一颜色的后继节点 随着询问左边界的递增,将处于两次左边界间的节点从$BIT$中删去,而加入其后继节点的位置 接下来统计处于$[l,r]$间的数的个数就好了 同时这 阅读全文
posted @ 2018-07-24 22:45 NewErA 阅读(156) 评论(0) 推荐(0)
摘要:Link: BZOJ 3123 传送门 Solution: 主席树+启发式合并 以前好像做的主席树都是在序列上的……在树上的主席树这样处理: 每个节点的主席树维护其到根节点的路径上的值,以其父节点为模板构造 那么为了取出$(u,v)$路径上的值用$seg[x]+seg[y]-seg[lca]-seg 阅读全文
posted @ 2018-07-23 22:36 NewErA 阅读(180) 评论(0) 推荐(0)
摘要:Link: BZOJ 3295 传送门 Solution: 虽说这是道$cdq$分治的基础题,但既然在练数据结构就用主席树写吧 (其实是我$cdq$分治没学好) 首先可以通过树状数组求出总的逆序对对数和每个数能组成的对数$cnt[i]=pre[i]+suf[i]$ 接下来如果删除了第$i$位,最多删 阅读全文
posted @ 2018-07-23 22:35 NewErA 阅读(194) 评论(0) 推荐(0)
摘要:Link: BZOJ 1901 传送门 Solution: 带修改主席树的模板题 对于静态区间第$k$大直接上主席树就行了 但加上修改后会发现修改时复杂度不满足要求了: 去掉/增加第$i$位上的值时要更新$i...n$间所有的主席树,使得单次修改的复杂度达到$n*log(n)$ 可以将原来的主席树看 阅读全文
posted @ 2018-07-23 22:18 NewErA 阅读(163) 评论(0) 推荐(0)
摘要:Link: BZOJ 1452 传送门 Solution: 二维树状数组模板题 发现颜色数很少$c<=100$,因此对于每个颜色都建一棵二维线段树即可 (第一次写二维数据结构,发现套个循环就行了?) Code: 阅读全文
posted @ 2018-06-26 21:15 NewErA 阅读(153) 评论(0) 推荐(0)
摘要:Link: POJ 3378 传送门 Solution: 按序列长度$dp$, 设$dp[i][j]$为到第$i$个数,符合要求的序列长度为$j$时的序列个数, 易得转移方程:$dp[i][j]=\sum_{k=1}^{i-1} dp[k][j-1] (dat[k]<dat[i])$ 用树状数组按$ 阅读全文
posted @ 2018-06-08 19:35 NewErA 阅读(378) 评论(0) 推荐(0)
摘要:Link: BZOJ 3155 传送门 Solution: 我们发现要维护的序列的每一项都有$i$项要维护, 我们要将每一项转化为只有1项要维护才能$log(n)$维护(否则每对一个值更新要更新$n$个值) 于是我们将每一项拆为两个前缀和相减, 开两个树状数组,第一个维护$a[i]$前缀和,第二个维 阅读全文
posted @ 2018-06-02 21:54 NewErA 阅读(162) 评论(0) 推荐(0)
摘要:Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1145 Solution: 算是一道神题了吧 设 f(abcd)为:当选出的四个数相对大小关系为abcd时,有多少种选择方式 则 res = f(1324) - f(1243) -f(143 阅读全文
posted @ 2018-05-28 22:55 NewErA 阅读(301) 评论(0) 推荐(0)
摘要:Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 Algorithm: 此题询问区间内出现次数超过1个的数字 明显在线做无从下手,无法在区间两端无序的情况下统计符合要求的数字 但可以发现,如果左端递增,是可以用树状数组维护右端数据的 阅读全文
posted @ 2018-05-19 12:06 NewErA 阅读(161) 评论(0) 推荐(0)