数状数组
文章平均质量分 90
qkoqhh
这个作者很懒,什么都没留下…
展开
-
XDOJ 1213
稽部面试题。。看数据范围应该是一道假背包(XDOJ都是假题)经师兄提示只看一个限制条件发现应该要排序,然后枚举每只鞋得到范围,然后二分找出方案数复杂度为nlogn,想了好久其实直接边枚举边选出最大的鞋就可以了,复杂度为n。然后在选出鞋的同时在树状数组里标记价值,这样就能够很快找出符合价值和范围的另一只鞋子。还是太弱。。要提示那么多下才写出来。。。从背包到树状数组。。真骚。。#i...原创 2017-09-30 16:39:31 · 470 阅读 · 0 评论 -
牛客训练(BIT+高精度)
又是这类用BIT辅助计数的题。。这个显然满足要求的区间比不满足的要多太多,所以变成求不满足的。。。然后要先求总方案数,为这个不是很想在化了,反正O(n)求也可以的。。然后求不满足的。。这里已经有4个端点,如果再枚举端点什么的显然很不明智。。因此应该从区间的性质入手,所以要枚举最值。。枚举[l2,r2]的max,从大到小枚举,设此时的位置为i,可以发现,能构成区间2的个数有(...原创 2018-10-06 21:43:38 · 205 阅读 · 0 评论 -
hdu6348(DP+BIT)
这个dp其实比较好想。。枚举lis长度i,可以发现这个可以从i-1这个状态转移过来。。把所有小于他的在他左边的然后如果直接转移是n^2,很容易发现从大到小边算边维护前缀和就能降复杂度了。。用BIT就是O(n^2logn)。。然后窝就只能想到这了。。然后由于数据是随机生成的(窝并没有看到),然后有一遍玄学论文又说随机生成的lis长度最长的期望为sqrt(n)。。然后复杂度就降到了...原创 2018-08-06 19:44:00 · 239 阅读 · 0 评论 -
nowcoder多校5F(概率+BIT)
dp姿势不对导致复杂度直线上升qaq这个的期望主要是通过计算每个点的贡献,每个点都会发生交换,那么就看发生交换的概率了。。这个概率主要是让前面的size大于他的点不出现,那么把对立事件的概率乘起来再乘他本身出现的概率就可以了。。那么可以这么做。。按size从大到小算,每次将1-pi维护到前缀乘积中。。单点修改,单点查询肯定用bit啦。。 /** * ...原创 2018-08-03 17:13:13 · 137 阅读 · 0 评论 -
nowcoder多校5I(计数+bit)
题意看了半天(雾。。然后可以发现1个点一定可以,2个点只要连线不与y平行就可以。。然后考虑3个点的。。3个点的话画几次可以发现必须得是<的才可以。。然后4个点发现怎么画都画不出来。。然后主要是算3点的。。枚举顶点,需要找x比他小的,y和他不同的点个数。。分侧求出后乘起来即可。。然后这个可以按x从大到小枚举一下,用bit去维护对应y上的位置(当然要离散化)。。x相同的时...原创 2018-08-03 17:06:15 · 161 阅读 · 0 评论 -
第三类BIT
先讲一下三类BIT。。第一类是点修改区间询问,第二类是区间修改点询问。。前两种都是十分常见。。第三类BIT指的是用BIT实现区间修改,区间询问。。思路大概这样,将区间修改拆成2个前缀区间的修改的差分。。然后用2个BIT维护,主要是用于求前缀和。。比如将前i个数都加x,对他后面的点的前缀和来说,增加了i*x;对他前面的点k来说,增加了k*x。。这样对前面和后面的点用不同的...原创 2018-07-22 09:23:16 · 154 阅读 · 0 评论 -
yandex资格赛e(tire+bit+离线处理+二分)
这个姿势有点特殊。。首先先把字符串变成数字再说。。用tire轻松解决。。。然后就是要在区间内查询是否m个数都存在了。。可以先离线处理,将之前出现过的相同的数字记下,枚举r,枚举的同时相同的数字只保留最后一个,因为区间右端已经确定,如果从右往左扫,之前的相同数字是起了重复作用,将这些数字标记为1的话就是转变为查询和为m的最小区间,直接二分即可。。由于是单点修改,区间和可用BIT维护。。原创 2018-02-19 18:43:57 · 529 阅读 · 0 评论 -
UVA11610(欧拉筛+二分+BIT)
看到数论其实就有点虚了。。还好欧拉筛自己还是会的。。其实很明显可以看出最后一个数位一定是0,那么在处理的时候先提出个2和5,把1e7降成1e6然后在1e6内筛出素数,题中的reverse prime就是把这些素数翻转后加0,然后排序。。当然我不是很想排序。。所以直接枚举了各个数去翻转,免去了排序。。然后就是把这些数的因子提出来。。在提的过程中可以判断剩下的数是不是素数。。这样可原创 2018-01-24 18:44:47 · 233 阅读 · 0 评论 -
poj 2464(离散化+BIT)
不得不说是一道比较烦人的题。。细节比较多由于没给xy范围所以必须先离散化。。之后再开2个BIT,以y值为下标维护点的个数,在枚举x时,一个BIT维护x左边的点个数,另一个维护x右边的点,然后在枚举的时候主要按点对BIT进行维护,对每个点进行差分求方案,对每个x求得最优方案后还要记录方案来求oli的得分。。然后记得输出oli得分要去重。。#include#include原创 2018-01-24 13:00:12 · 270 阅读 · 0 评论 -
bzoj4034(dfs序+BIT/链剖+线段树)
记得以前是用链剖+线段树做的,在链剖的时候顺便维护dfs序,思路简单实现起来就有点麻烦了。。可参照:http://www.cnblogs.com/onlyRP/p/5041702.html回顾这题发现其实主要是2操作针对子树而3操作针对链,而且唯一的询问操作3的链其实是到根的权值和,那么就想能不能直接dfs序进行操作呢?做一遍dfs序后我们可以用前缀和求出权值和,操作1修改点权值就原创 2018-01-07 10:38:18 · 254 阅读 · 0 评论 -
hdu 2852(BIT+二分)
找比k大的数,可以加上k前面的个数,然后转化为求第k大数把数作为下标,然后维护小于x的数的个数,然后查找的时候二分即可,时间复杂度O(n*logn*logn)当然如果用线段树是可以达到O(nlogn)的。。不过这题的意图是BIT,而且还放宽了时限。。#include#include#include#include#include#include#define原创 2018-01-22 19:39:28 · 232 阅读 · 0 评论 -
poj3321(dfs序+BIT)
好像dfs序做得不多啊。。然后肯定忘光了。。要捡回来。。记录完时间戳in和out之后区间[in,out]就可以代表整个子树了,然后单点修改可以用BIT。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=r;i++)#define dec(i,l,r) for原创 2017-12-28 19:16:04 · 164 阅读 · 0 评论 -
poj2155(二维BIT+前缀和)
这道题算是经典的前缀和了。。不过是二维的,在标记的时候要注意一下,看怎么add的,然后画个图分析应该非常清晰了。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=r;i++)#define dec(i,l,r) for(int i=l;i>=r;i--)#原创 2017-12-28 12:48:23 · 172 阅读 · 0 评论 -
poj1195(二维BIT)
想去写写BIT,最近的经验告诉我线段树还是不能完全代替BIT的。。然后做到二维BIT也没什么经验就把模板给贴一下。。二维BIT就是把数组开成二维而已,主要不同的地方就在差分了。。然后代码好像没什么办法去压,不过也不算难看。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l原创 2017-12-27 22:25:29 · 205 阅读 · 0 评论 -
codeforce 899F
给定长度n的字符串,m次操作,每次删去[l,r](对现字符串而言)中的所有字符c然后我在比赛时想的是把每个字符的个数都统计一遍。。复杂度快要爆炸然而还是抱着侥幸心理写了下去(其实是我不会E),然后陷入了无尽的坑。。。用半小时写出线段树(还好没出错)一交MLE。。。然后把叶子的儿子给砍掉了(这个优化以后还是能用得上滴。。),还不行。。再把满二叉树的节点求出来,然后还不行?!发现得缩到原来的一原创 2017-12-18 23:49:58 · 249 阅读 · 0 评论 -
bzoj3688(DP+BIT)
这个题还是挺不错的。。和hdu6357很像但又有不同之处。。不如说这个题更具有一般性。。很容易想到要设扫到i且有j条折线的方案数,可是在转移的时候就不能处理连续上升(下降)的情况,所以得加一维表示折线是上升还是下降所以设d[i][j][k],表示以i(x坐标)点为末尾,有j个折线的方案数,其中k==1代表折线末尾上升,k==0代表折线末尾下降那么然后按j递增枚举,每次按y从...原创 2018-10-20 00:04:19 · 464 阅读 · 0 评论