
树状数组
文章平均质量分 67
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 3295 动态逆序对 CDQ分治
BZOJ 3295 动态逆序对 CDQ分治原创 2014-08-22 20:38:58 · 4464 阅读 · 0 评论 -
BZOJ 3787 Gty的文艺妹子序列 分块+树状数组
题目大意:带修改、强制在线的区间逆序对将之前3744TLE了的某个做法重写了一发 把其中一些预处理改成了树状数组 不得不说树状数组常数还是小啊令g[i][j](iequals[i][j]表示前i块之内j的数量 这个直接暴力即可smaller[i][j]表示前i块之内小于等于j的数的数量 第一维暴力第二维树状数组修改时都维护一遍 查询时 首先我们把区间分为三块令A为左侧零碎部原创 2014-12-03 17:34:02 · 2624 阅读 · 1 评论 -
BZOJ 3173 Tjoi2013 最长上升子序列 Treap+树状数组
题目大意:给定一个序列,依次将1~n插入,问每次插入之后序列的LIS长度是多少由于是从小到大插入,因此插入一个数之后显然是不影响之前的答案的因此我们不妨先用平衡树搞出插入之后的序列,再求一遍LIS即可注意最后每个点还要对前面的取一下max 因为插入后LIS可能还是之前的序列蒟蒻的我到底还是把平衡树写挂了。。。#include #include #include #incl原创 2015-01-29 13:42:22 · 2331 阅读 · 2 评论 -
BZOJ 3529 SDOI2014 数表 莫比乌斯反演+树状数组
题目大意:令F(i)为i的约数和,多次询问对于1n,m首先如果不考虑a的限制 令g(i)为1那么显然有利用线性筛处理出F(i) 那么答案显然是治好了我多年的公式恐惧症。。。现在我们只需要求出的前缀和 这个问题就能在O(√n)的时间内出解枚举每一个i 枚举i的倍数 暴力即可求出这个函数 然后处理前缀和即可 复杂度是O(nlogn)的那么现在有了a的原创 2014-12-22 09:28:07 · 2809 阅读 · 2 评论 -
BZOJ 3790 神奇项链 Hash+二分+树状数组
题目大意:给定一个串,问这个串最少可以由回文串拼接多少次而成(拼接可以重叠)首先将每两个字符之间插入占位符,然后Hash+二分搞出所有极大回文串(可以用manacher,我不会)问题转化成了给定一些区间,求最少的能覆盖整个数轴的区间将所有区间按照某一端点排序 然后上树状数组即可回头还是去学学manacher吧。。。#include #include #include #i原创 2014-12-11 15:01:32 · 1556 阅读 · 0 评论 -
BZOJ 2738 矩阵乘法 整体二分+二维树状数组
题目大意:给定一个矩阵,多次求某个子矩阵中的第k小分块解法见 http://blog.youkuaiyun.com/popoqqq/article/details/41356899《论除最小割外题目解法从来与题目名称无关系列》整体二分 Solve(x,y,S)表示处理答案在[x,y]区间内的询问集合S预先将所有数按照大小排序 每次将[1,mid]之间的数插入树状数组然后对于分治内部的每一个原创 2014-12-30 13:25:18 · 2386 阅读 · 0 评论 -
BZOJ 3881 Coci2015 Divljak fail树+树链的并
题目大意:给定两个字符串集合S和T,初始给定S集合中的所有字符串,不断向T集合中添加字符串,以及询问S集合中的某个字符串在T集合中的多少个字符串中出现过神题- -首先对S集合的所有字符串构建fail树T集合中每加入一个字符串,我们就将这个字符串在AC自动机上跑一遍,并记录经过的所有节点根据fail树的性质,这些节点到根路径上的所有节点的并集的出现次数都加了1因此我们要求的就是树原创 2015-01-22 15:41:34 · 3191 阅读 · 1 评论 -
BZOJ 2683 简单题 CDQ分治+树状数组
题目大意:维护一个矩阵,单点修改,子矩阵查询,不强制在线CDQ分治裸题。。。逗我。。。同BZOJ 1176 Mokia 题解见 http://blog.youkuaiyun.com/popoqqq/article/details/39672705#include #include #include #include #define M 500500using namespace std;原创 2015-01-05 17:08:04 · 1672 阅读 · 0 评论 -
BZOJ 2789 Poi2012 Letters 树状数组
题目大意:给定两个字符串A和B,每次可以交换A中相邻两个字符,求最少交换多少次后A可以变成B首先我们需要找到A中每个字符和B中每个字符的对应关系容易发现,同样的字符一定是按顺序一一对应的,因为交换两个字符的相对位置是需要代价的poi然后就是树状数组求逆序对了poi水水更健康poi#include #include #include #include #define M原创 2015-03-03 20:38:03 · 1167 阅读 · 0 评论 -
BZOJ 1109 POI2007 堆积木Klo LIS
题目大意:给定一个序列,可以多次将某个位置的数删掉并将后面所有数向左串一位,要求操作后a[i]=i的数最多首先我们假设最后a[i]=i的数的序列为S那么S满足随着i递增,a[i]递增(相对位置不变),i-a[i]单调不减(后面的不会比前面移动的少)这是一个三维偏序问题要是不看题解我就真去写CDQ分治了233我们发现i=(i-a[i])+a[i]也就是说如果一个序列满足i-a原创 2015-03-12 15:13:23 · 1905 阅读 · 0 评论 -
BZOJ 3594 Scoi2014 方伯伯的玉米田 树状数组
题目大意:给定一个序列,可以选择k次区间并将区间内每个数都+1,求操作之后LIS的最大值我的做法不是标解。。。5E的复杂度为何跑的飞起。。。首先一个显而易见的结论就是我们选择的k次区间右端点都是n时才能保证最优知道这个我们就可以DP了- -令f[i][j]表示前i个数上升j次的最大LIS那么有f[i][j]=max{f[k][l]|k看到三维偏序就可以用二维树状数组了- -原创 2015-03-12 16:23:05 · 2420 阅读 · 0 评论 -
BZOJ 1818 Cqoi2010 内部白点 树状数组
题目大意:给定平面上的一些黑点,其它位置都是白点,一个白点如果上下左右都有黑点就会变成黑点,求最终会有多少个黑点语文题?总之我们现在得到了一些横向和纵向的线段(注意线段不能包含两端点!),求出交点数后+n就是答案我们可以将横向线段看做修改,纵向线段看做询问,那么一个询问可以拆成两个然后我们离线做,将询问按y坐标排序,对于每个询问将y坐标小于等于这个询问的修改都加入树状数组,然后查询原创 2015-03-13 20:19:08 · 1384 阅读 · 0 评论 -
BZOJ 1107 POI2007 驾驶考试egz LIS
题目大意:。。。不是很好叙述自己看吧。注意要剪掉初始就能到达所有终点的点的数量http://blog.163.com/c_sunshine/blog/static/2439650542015028013488/OTZ 这做法实在是太优雅了!#include #include #include #include #define M 100100using namespace原创 2015-03-24 20:02:18 · 2129 阅读 · 0 评论 -
BZOJ 2244 SDOI2011 拦截导弹 CDQ分治/二维树状数组
题目大意:给定一个序列,每个元素是一个二元组,等概率选择一LIS,求LIS长度以及每个元素被选中的概率第一问CDQ分治裸上第二问用每个元素所在的LIS个数/总LIS个数就是答案每个元素所在的LIS自己必选,然后统计前面的方案数和后面的方案数以前面的方案数为例,令f[x]为以x结尾的LIS长度,那么有DP方程:g[i]=Σg[j] (f[j]+1=f[i],j将所有元素按f值原创 2015-04-09 17:17:00 · 2444 阅读 · 0 评论 -
BZOJ 4009 HNOI2015 接水果 树套树
题目大意:给定一棵树和mm条路径,每条路径有一个权值,Q次询问,每次询问某条路经包含的所有路径中权值的第k小 原来精神污染那个题是这么做的啊QwQ 题解网上都有,我就直接贴代码了 没心情写题解了#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 40400using n原创 2015-04-29 18:33:04 · 2630 阅读 · 0 评论 -
BZOJ 2141 排队 分块+树状数组
题目大意:给定一个序列,m次交换两个数,求初始逆序对数及每次交换后的逆序对数首先离散化,分块,对于每块建立一个树状数组,保存这个块中的所有元素然后对于每个询问(x,y) (xa[i]a[i]>a[x] ++ansa[i]a[i]>a[y] --ans然后对于块中的树状数组处理,块外的暴力注意此题元素有重复 亲测可信RANK5吓尿0.0 为何块套树要比树套树还快…原创 2014-10-22 11:43:50 · 2539 阅读 · 0 评论 -
BZOJ 1935 SHOI2007 园丁的烦恼 树状数组
题目大意:给定平面上的一些点,多次询问某个矩形中有多少个点将每个询问拆成4个 然后把所有询问和点都按照横坐标排序对于每个询问,将所有x值小于等于这个询问的x的点的y值加入树状数组 然后在树状数组上查询小于等于这个询问的y值的点的数量别被1000W吓到了 如果不爆内存的话1E也是能搞的 套个log就没多少了#include #include #include #include原创 2014-11-23 21:29:18 · 1867 阅读 · 0 评论 -
HDU 4417 Super Mario 划分树/树状数组
题目大意:给定一个序列,求区间内小于等于某数的元素数量首先区间排名一看就是划分树 不过和第k小不一样 我们需要做一些处理第一种处理方式是二分答案 然后转换成区间第k小 好方法我喜欢 但是这里说的不是这种方法首先建树,然后对于每个询问,我们讨论k与a[mid]的关系若k若k>=a[mid],则左子树内一定所有数都小于等于k,于是我们将查询区间中进入左子树的元素的数量记入ans,然原创 2014-09-24 12:59:34 · 1365 阅读 · 0 评论 -
BZOJ 2819 Nim 树链剖分/DFS序+LCA+树状数组
题意:给定一棵树,每个节点是一堆石子,给定两种操作:1.改变x号节点的石子数量2.用从x到y的路径上的所有堆石子玩一次Nim游戏,询问是否有必胜策略Nim游戏有必胜策略的充要条件是所有堆的石子数异或起来不为零这题首先一看就是树链剖分 然后题目很善良地告诉我们深搜会爆栈 于是我们可以选择广搜版的树链剖分BFS序从左到右是深搜,从右到左是回溯,一遍BFS就够单点修改区间查询还可原创 2014-09-02 09:30:06 · 2793 阅读 · 0 评论 -
BZOJ 3262 陌上花开 CDQ分治
题目大意:给定一堆花,每个花有三个属性,定义一朵花比另一朵花美丽当期仅当三个值都大于等于另一朵花 定义花的评级为没有它美丽的花的数量 求评级为0~N-1的花的数量CDQ分治的题,之前在HZWER神犇的博客里见到过,就写了写,今天BZ活了想去交才发现原来是只有会员才知道的世界。。。还好学校的大神有BZ的会员,借号交了下,半天过不去,最后发现原来我CDQ分治写脑残了。。。。妈妈再也不用担心我的学习原创 2014-09-25 07:20:19 · 3501 阅读 · 0 评论 -
BZOJ 3333 排队计划 树状数组+线段树
题目大意:给定一个序列,每次选择一个位置,把这个位置之后所有小于等于这个数的数抽出来,排序,再插回去,求每次操作后的逆序对数首先我们每一次操作 对于这个位置前面的数 由于排序的数与前面的数位置关系不变 所以这些数的逆序对不会变化对于这个位置后面比这个数大的数 由于改变位置的数都比这些数小 所以这些数的逆序对不会变化说到底就是排序的数的逆序对数改变了 以这些数开始的逆序对没有了于是就原创 2014-10-23 10:08:42 · 2177 阅读 · 0 评论 -
BZOJ 1176 [Balkan2007]Mokia CDQ分治
题目大意:维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数MPOJ1195的加强版没记错的话上午这题还没有中文题目描述的说0.0 好迅速首先这题看到W就知道二维树状数组挂了 看到M就发现离散化了也搞不了 0.0这题似乎是CDQ分治被发现之后第二个解决的题目。。。不过只有会员才知道的世界,今天反应过来刷刷。。。修改和询问原创 2014-09-29 17:11:41 · 3418 阅读 · 4 评论 -
BZOJ 3038 上帝造题的七分钟2 树状数组+并查集
题目大意:给定一个序列,提供下列操作:1.将[l.r]区间内每个数a[i]变为sqrt(a[i])2.查询[l,r]区间的和同BZOJ3211 花神游历各国链接:http://blog.youkuaiyun.com/popoqqq/article/details/39961591我zhege原创 2014-10-10 17:52:28 · 1906 阅读 · 1 评论 -
BZOJ 3211 花神游历各国 树状数组+并查集
题目大意:给定一个序列,提供下列操作:1.将[l.r]区间内每个数a[i]变为sqrt(a[i])2.查询[l,r]区间的和根号是不支持区间修改的,于是我们选择单点修改区间查询的树状数组,但是这样是O(n^2)的,怎么办?我们发现一个数x最多开loglogx次根号就会变为1 也就是一个int范围内的数只要开5次根号就会变为1 于是修改的总时间复杂度为O(nloglogn)但是单原创 2014-10-10 14:22:59 · 2399 阅读 · 0 评论 -
BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组
题目大意:给定n个数和两个长度为n*5的序列,每个数恰好出现5次,求两个序列的LCSn所以我们考虑LCS的一些性质LCS的决策+1的条件是a[i]==b[j] 于是我们记录a序列中每个数的5个位置扫一下b[i] 对于每个b[i]找到b[i]在a中的5个位置 这5个位置的每个f[pos]值都可以被b[i]更新 于是找到f[1]到f[pos-1]的最大值+1 更新f[pos]即可这原创 2014-10-10 10:37:54 · 2499 阅读 · 0 评论 -
BZOJ 3289 Mato的文件管理 莫队算法+树状数组
题目大意:给定一个序列,多次询问区间内逆序对的数量总算是明白城市旅行是如何RE的了……尼玛BZOJ坑爹 ostream输出流过大居然会RE!输出时顺手用了cout结果各种RE不止……原来是这样建议各位在死活RE就是找不到原因的时候检查一下是否大输出用了cout这题用莫队可以很简单搞掉 逆序对用树状数组就可以维护 一会去想想强制在线怎么搞#include #include #in原创 2014-11-13 19:53:36 · 1504 阅读 · 0 评论 -
BZOJ 3744 Gty的妹子序列 分块+树状数组+可持久化线段树
题目大意:给定一个序列,多次求区间内逆序对个数 强制在线让我们呐喊一声:出题人卡常数丧心病狂!再来一次:出题人卡常数丧心病狂!!!!不强制在线的直接莫队就能搞 强制在线我是跪了QTZ首先看这数据范围肯定O(n√nlogn)了 我们分块 令cnt[i][j]为从第i块的开头起到第j个点这段区间的逆序对数这个用树状数组就可以O(n√nlogn)搞出来 我一开始直接用可持久化线段原创 2014-11-13 23:04:39 · 3658 阅读 · 7 评论 -
BZOJ 1878 SDOI2009 HH的项链 树状数组/莫队算法
题目大意:给定一个序列,求一个区间内有多少个不同的数正解是树状数组 将所有区间按照左端点排序 然后每次只统计左端点开始的每种颜色的第一个数就行了 用树状数组维护我写的是莫队算法 莫队明显能搞 m√m明显慢了点但是还是能接受的一个复杂度一开始离散化数组开小了各种秒RE…… 跪了#include#include#include#include#include#define M原创 2014-11-19 14:45:00 · 2001 阅读 · 0 评论 -
BZOJ 2434 NOI2011 阿狸的打字机 fail树+树状数组
题目大意:初始字串为空,首先给定一系列操作序列,有三种操作:1.在结尾加一个字符2.在结尾删除一个字符3.打印当前字串然后多次询问第x个打印的字串在第y个打印的字串中出现了几次卡了很久……到底还是对AC自动机了解不是很深啊QAQfail树不是很难想 至少在用AC自动机切掉3172之后不是很难想……首先构建AC自动机 注意由于这个字串的特殊构造 我们不必每打印一个字符串再原创 2014-11-26 16:39:36 · 3324 阅读 · 0 评论 -
BZOJ 2743 HEOI2012 采花 树状数组
题目大意:给定一个序列,多次询问区间内出现两次以上的数的数量n考虑对于每个区间的左端点 对这个区间有贡献的数是从这个端点开始所有第二次出现的数于是我们将区间按照左端点排序 然后从左向右扫令next[i]为i位置上的数下一次出现的位置初始将所有第二次出现的数加入树状数组然后每删除一个点i 将next[i]从树状数组中删除 然后将next[next[i]]加入树状数组然后原创 2014-11-21 12:11:24 · 1750 阅读 · 3 评论 -
BZOJ 2762 JLOI2011 不等式组 树状数组
题目大意:给定一些形如ax+b>c的不等式,支持插入和修改,以及询问当x=k时有多少不等式成立将不等式变形 可以得到每个不等式成立时x的取值范围 在树状数组上统计即可注意事项:1.a可以等于0 此时若b>c x∈R 若b2.x的取值范围可能超过[-1000000,1000000]3.由于有负数 所以区间修改时左右端点都要加上1000001 若加上1000000则死循环4.小原创 2014-11-21 14:07:33 · 2128 阅读 · 0 评论 -
BZOJ 1901 Dynamic Rankings 主席树
题目大意:可修改的区间第k小这个主席树卡了我两天。。。切掉Count On A Tree 之后我就一直认为带修改的主席树是树状数组套可持久化线段树。。。其实我被误导了。。。尼玛带修改的主席树和可持久化线段树毛关系都木有啊!!!那就是动态的权值线段树啊啊啊啊啊啊啊!!!好吧这里给不明白主席树的孩纸一些简介:1.外层树状数组2.里层线段树3.线段树动态开节点。仅此而原创 2014-10-15 11:40:57 · 1613 阅读 · 0 评论