
树状数组
文章平均质量分 84
逐梦起航-带梦飞翔
为了更加长远的快乐!
展开
-
bzoj1452 [JSOI2009]Count
刷题记录:bzoj1452 [JSOI2009]Count,一道只能用树状数组,不能用线段树的题目。原创 2017-12-23 13:11:02 · 305 阅读 · 0 评论 -
洛谷1527 [国家集训队]矩阵乘法 Accepted(整体二分)(树状数组)
题目给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数。题解整体二分+树状数组求第k小的数我怎么就没想到整体二分呢!还是挺裸的,把所有元素记录下位置一并放入中b队列中,询问也是。因为是二维的,所以树状数组也要升级成二维的,s[x][y]表示(1,1)-(x,y)这个矩阵中小于等于mid的数的个数,酱紫就可以判断一个询问要取到bl还是br了。代码#in...原创 2018-10-27 09:18:33 · 224 阅读 · 0 评论 -
洛谷4648 [IOI2007] pairs 动物对数(曼哈顿转切比雪夫)(扫描线+树状数组)(前缀和)
题目洛谷4648 [IOI2007] pairs 动物对数范围与提示一维:M 最大是 75000000二维:M 最大是 75000三维:M 最大是 75题解要分情况讨论啊!一维双指针随便搞,一个指头,没个头找个最大尾,计入答案。二维曼哈顿转切比雪夫+扫描线+树状数组很容易想到一个点能看到的点呈一个45°斜角的正方形,这太难处理了。转成切比雪夫距离就变成了...原创 2018-10-29 13:53:07 · 563 阅读 · 0 评论 -
洛谷2889 [USACO07NOV]挤奶的时间Milking Time(DP)(树状数组)
题意奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量。如果在(si,ti)时刻挤奶,那么休息完的时间是si+r,即下一次可以挤奶的最早时间是(si+r,...)。题解DP+树状数组设f[i]表示在第i小时结束挤奶时收获的最大奶量。有如下DP方程可以用...原创 2018-10-17 13:49:16 · 346 阅读 · 0 评论 -
洛谷3463 [POI2007]EGZ-Driving Exam(DP)(树状数组)
题目成都的驾驶考试在一个有n条平行的自南向北的单向的道路的场地中进行。每条道路长度为m米,并且都在同一条水平线上开始和结束。街道从西向东分别编号为1到n。同样有p条单向的自西向东或自东向西的街道垂直于上面描述的街道,每一条这样的街道链接了两个相邻的自南向北的道路。当然自西向东和自东向西的道路可以重叠,那就是一个双向的街道了。考生选择一个自南向北的道路作为他考试的起始点和另外一个自南向北的道路...原创 2018-10-16 14:14:20 · 296 阅读 · 0 评论 -
洛谷3287 [SCOI2014]方伯伯的玉米田(DP)(树状数组)
题目方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。这排玉米一共有N株,它们的高度参差不齐。方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。问能最多剩多少株玉米,来构成一排...原创 2018-10-16 13:27:16 · 325 阅读 · 0 评论 -
洛谷3178 [HAOI2015]树上操作(树上树状数组-改段求段)(线段树)
题目有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 题解1树链剖分裸啊!对于子树操作,最合适的结构就是dfs序了,恰好树链剖分就是带重边的dfs序。接下来自己yy吧。...原创 2018-09-04 16:12:14 · 312 阅读 · 0 评论 -
树状数组—求第k小的数—离散化
树状数组也求第k小的数(不会?)虽然码量小,速度快,但有缺点。因为它建的是权值线段树,所以如果权值太大,它就无法正常运作。有一种方法可以解决零散的大数,那就是离散化。本篇文章就来介绍一下用离散化优化其空间的树状数组。思路把所有数离散化,该离散化只需要能保留数字排名的前后即可,对区间信息等不作要求。离散之后,按照离散后的权值插入树状数组,用这个树状数组就可以求出第k小的数的离散值了,实际值再转换一下...原创 2018-04-21 13:05:09 · 890 阅读 · 0 评论 -
树状数组—求第k小的数—入门详解
第k大的数有太多的方法来求了,这是一个十分基础的问题,可以由很多种数据结构来完成。常用的有排序、主席树……。今天我要介绍一种更快更简洁的算法(Duang!)——树状数组。哦?它也可以求第k大?它不是只用于求区间和的算法吗?怎么还可以用来求大小关系?哈哈,一会就让你大开眼界。思路建一个权值树状数组。何为权值树状数组?大家有没有听说过权值线段树?权值线段树就是记录同数值的数的个数的线段树。例如有3,5...原创 2018-04-17 19:47:22 · 2632 阅读 · 3 评论 -
树状数组—改段求段
改段求段是树状数组中的一个重难点,它需要运用上改段求点的知识。需要2个树状数组:c1,c2。c1与改段求点的c一样,都是记录差值,为了求出某个点的值。c2用来记录当以c1[ i ]×i来求1~i的值时,与真实值的差(c2[ i ]=ans-c1[ i ]×i),所以ans=c1[ i ]×i+c2[ i ]。当c2需更新时,只需改头和尾+1即可。头:加上 -(x-1)*z,因为a[ x ]增大了,...原创 2018-02-08 11:07:53 · 574 阅读 · 0 评论 -
树状数组—改点求段
改点求段是树状数组中最简单的,它只改变某个点,然后求某一段。获得x的管理范围:int lowbit(int x) { return x&-x;}给x加上k:(不停地找上司,不停地改变,直到到了头)void add(int x,int k){ while(x<=n) { c[x]+=k; x+=lowbit(x); ...原创 2018-02-08 11:00:20 · 425 阅读 · 0 评论 -
树状数组—改段求点
对于更改一段区间的值,然后求出某个点的值的问题,我们可以先记录它的第一个量,后面记录两两的差值(c[ i ] = a[ i ] - a[ i-1 ]),所以a[ i ] = a[ i-1 ] + c[ i ]。这样就可以利用树状数组求和快的特点,迅速求出其值。相当于每个c存的是与上一个值的距离(意思就是需要改变多少就能得到现在这个值)。在更新时也只需要改区间头的c值 以及区间尾+1的c值 即可。其...原创 2018-02-08 10:55:14 · 497 阅读 · 0 评论 -
树状数组—介绍
树状数组的简单介绍。原创 2017-01-17 16:53:01 · 480 阅读 · 0 评论 -
洛谷3460 [POI2007]TET-Tetris Attack(贪心)(树状数组)
题意给定一个长度为2n的序列,1~n各出现两次,可以交换相邻两项,两个同样的数放在一起会对消,求把所有数对消的最小交换次数,并输出方案。特性一种很显然的贪心,两两间原始距离最近的先合并,再到远的。这么做是为了在包含关系的时候先处理掉里面的。如果要是交叉的话,先删哪个都没所谓,可以自己YY一下。心路所以我就想排序后用树状数组维护编号,其它模拟就好,因为总步数才1 000 000...原创 2018-11-01 13:15:44 · 345 阅读 · 0 评论