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

1
摘要:"传送门" 重点 $1$ $$\frac{f(a,a+b)}{a(a+b)}=\frac{f(a,b)}{ab}=\frac{f(a,b a)}{a(b a)}=\frac{f(a,b~mod~a)}{a(b~mod~a)}=\frac{f(d,d)}{d^2}$$ 其中 $d=gcd(a,b+b) 阅读全文
posted @ 2018-12-24 16:30 Cyhlnj 阅读(172) 评论(0) 推荐(0)
摘要:题面 Bzoj权限题 "luogu" Sol 整体二分+二维树状数组裸题。。。 二维树状数组写错了$WA$两遍。。。 cpp include define IL inline define RG register define Fill(a, b) memset(a, b, sizeof(a)) u 阅读全文
posted @ 2018-04-12 22:21 Cyhlnj 阅读(172) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 处理出每个数$a_i$之前第一个比它小的数$a_{l 1}$和后面第一个比它小的数$a_{r+1}$ 那么左端点在$[l,i]$右端点在$[i,r]$的区间的最小值都是$a_i$ 把它看成是一个顶点$(l,r)$和$(i,i)$的矩形内的加法,每个数加上$a_i$ 询问就是 阅读全文
posted @ 2018-04-12 19:00 Cyhlnj 阅读(149) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-03-24 17:00 Cyhlnj 阅读(24) 评论(0) 推荐(0)
摘要:题意 "luogu的翻译" 给定一棵n个点的树,树上有m个黑点,求出一条路径,使得这条路径经过的黑点数小于等于k,且路径长度最大 Sol 点分治辣 如果是等于$k$的话,开个桶取$max$就好了 而小于等于$k$,就可以把桶换成树状数组,求前缀$max$ 很慢~~能过~~ cpp include d 阅读全文
posted @ 2018-02-26 19:05 Cyhlnj 阅读(115) 评论(0) 推荐(0)
摘要:题面 "Luogu3242" Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的$x, y$在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录下每个点的$dfs$序,和这棵子树结束的$dfs$序 发现上述讨论就是相当于求水果这个点$(x, y 阅读全文
posted @ 2018-02-06 18:43 Cyhlnj 阅读(189) 评论(0) 推荐(0)
摘要:题面 "Luogu4175:[CTSC2008]网络管理Network" Sol 路径第$k$大 无解直接判断就好了 然后整体二分,加上树链剖分+树状数组统计 cpp include define RG register define IL inline define Fill(a, b) mems 阅读全文
posted @ 2018-02-06 18:34 Cyhlnj 阅读(158) 评论(0) 推荐(0)
摘要:题面 "Luogu" Sol 整体二分 比较简单,当练手题 每次树状数组统计 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; 阅读全文
posted @ 2018-02-06 18:25 Cyhlnj 阅读(249) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol $CDQ$分治 先对$x$排序,对$y$在$CDQ$分治是从大到小排序 从大到小加入,右边用单调栈维护$x$递增,$y$递减的序列 左边就是找到$x$比它大,最小的$y$(树状数组解决) 再在右边找到最后一个小于这个$y$的位置,那么栈顶到这个位置都是答案 cpp incl 阅读全文
posted @ 2018-02-05 08:21 Cyhlnj 阅读(146) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 先求出最长上升序列,倒着求,然后贪心的往后选,选满足的 求最长上升序列我用的是树状数组 阅读全文
posted @ 2018-01-25 21:33 Cyhlnj 阅读(131) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 求区间逆序对个数,离线莫队搞,开树状数组统计,记得开$longlong$ ~~不然WA无数遍不知道为什么~~ include define IL inline define RG register define Fill(a, b) memset(a, b, sizeof( 阅读全文
posted @ 2018-01-22 20:16 Cyhlnj 阅读(115) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 首先有个很显然的暴力,构建AC自动机 每次询问$x, y$就$y$暴跳$trie中的父亲$,$跳fail$检查是否有$x$的结尾 cpp include define RG register define IL inline define Fill(a, b) memset 阅读全文
posted @ 2018-01-21 20:09 Cyhlnj 阅读(140) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 先不管$a$的限制 设$f(n)$表示f的约数和($据说是\sigma$),它是个积性函数 "(筛法)" ,$n define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) us 阅读全文
posted @ 2018-01-17 10:58 Cyhlnj 阅读(151) 评论(0) 推荐(0)
摘要:树状数组套线段树(值域线段树)记得离散化 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std 阅读全文
posted @ 2018-01-05 17:27 Cyhlnj 阅读(174) 评论(0) 推荐(0)
摘要:这道题显然平衡树,splay,treap什么的随便切 然而我不想打,决定水过这道题 把空间开3倍,树状数组维护它前面的树的个数,开个id数组记录位置 找一个数排名直接二分加求前缀和,log^2的搞一搞 把一个数放在顶/低 直接丢在当前顶/低的前后就可以了不然开3倍数组干嘛 c常数小堪比log的平衡树 阅读全文
posted @ 2018-01-04 16:43 Cyhlnj 阅读(233) 评论(0) 推荐(0)
摘要:动态区间第k小 离散化后 那么每个点开一棵线段树(主席树)再套一个树状数组在外面 每次询问区间内的树的个数时 相当于进行了一次树状数组求区间和的操作,只是是把树状数组那个点看做主席树,对log棵主席树求区间和 然后每次询问,修改时就是把log棵主席树同时跳到儿子,修改也是log棵 时间复杂度O(nl 阅读全文
posted @ 2017-12-23 11:09 Cyhlnj 阅读(216) 评论(0) 推荐(0)
摘要:CDQ套CDQ或者CDQ套树套树 前者快于后者然而我写了后者 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # define IL in 阅读全文
posted @ 2017-12-19 19:37 Cyhlnj 阅读(230) 评论(0) 推荐(0)
摘要:CDQ分治或树套树可以切掉 CDQ框架: 先分 计算左边对右边的贡献 再和 所以这个题可以一维排序,二维CDQ,三维树状数组统计 CDQ代码 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algori 阅读全文
posted @ 2017-12-19 19:34 Cyhlnj 阅读(219) 评论(0) 推荐(0)
摘要:CDQ分治 把删除转变为逐个添加,于是就变成了三维偏序问题 时间,位置,大小 分两遍统计即可 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h 阅读全文
posted @ 2017-12-19 19:28 Cyhlnj 阅读(230) 评论(2) 推荐(0)
摘要:翻译: 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果。卡卡很喜欢苹果。树上有N个节点,卡卡给他们编号1到N,根的编号永远是1.每个节点上最多结一个苹果。卡卡想要了解某一个子树上一共结了多少苹果。 现在的问题是不断会有新的苹果长出来,卡卡也随时可能摘掉一个苹果吃掉。你能帮助卡卡吗? Input 输 阅读全文
posted @ 2017-07-01 22:00 Cyhlnj 阅读(172) 评论(0) 推荐(0)

1