树状数组
风中之神111
我亦飘零久
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ1990--MooFest(转化为树状数组)
题意: n头牛,每头牛有两个值,v和x,两两之间有一个值,设v分别为v1,v2, x为x1,x2,则它们之间的值为abs(x1-x2) * Max(v1,v2), 求所有n*(n-1)/2对牛之间值的总和。 思路: 看了https://blog.youkuaiyun.com/bestsort/article/details/80853221,有图真好,一下就清楚了,下面的图也是摘自那里 按照题意,是求: ...原创 2019-08-02 17:46:12 · 289 阅读 · 0 评论 -
POJ2481_Cows(树状数组逆序数)
题意: 给了N个线段(N<=10000),现在请输出每个线段被多少个线段包围了。 [L,R]要包围线段[l,r]…则L<=l && R>=l && R-L > r-l。 思路: 先将这些线段排序,左端点升序,右端点降序。 排完以后,前面的左端点肯定不会比后面的大,要想包围,就看右端点是否比后面大。这样把右端点单独拿出来作为一个序列。能包围它的...原创 2019-08-02 10:25:23 · 246 阅读 · 0 评论 -
Hdu1394-Minimum Inversion Number(树状数组求逆序数)
题意: 一个n的元素组成的序列,依次将序列的第一个元素移到尾部,形成了一个新序列,这样一共能有N个不同的序列,求这些序列最小的逆序数。 思路: 先求出原序列的逆序数。再依次将首部移到尾部,计算逆序数,取最小。 // 逆序模型 + 离散化 #include <cstdio> #include <cstring> #include <queue> #include...原创 2019-08-01 22:33:42 · 218 阅读 · 0 评论 -
POJ3321-AppleTree(树状数组)
题意: 给出一个苹果树,每个节点最多只能有一个苹果,一开始都有一个苹果,有两种操作: C X,如果X点有苹果,则拿掉,如果没有,则新长出一个 Q X,查询X点与它的所有后代分支一共有几个苹果 思路: 首先自己对苹果进行编号,每个节点存两个值,一个是dfs访问次序编号left,一个是其子树中最大的编号rig。这个点的右值,包含了当前点所有的后代,后代必然是所有编号大于本节点的点,那么祖先呢,那必然是...原创 2019-08-01 21:43:31 · 241 阅读 · 0 评论 -
Hdu1166——树状数组模板题
树状数组还不会的可以看:https://blog.youkuaiyun.com/WhereIsHeroFrom/article/details/78922383 鉴于博客中个别点说的很简短,有时难以理解,这里再补充一些,帮助理解: 关于IUPQ模型的理解: IUPQ模型:区间更新,点查询。 切入点:差分数组 设原数组为A[] = a, b, c, d, e。差分数组B[] = a, b-a, c-b, d-c...原创 2019-08-08 10:25:56 · 269 阅读 · 0 评论 -
POJ2892-Tunnel Warfare(数状数组+二分)
题意: 有1-n个村子,3种操作,D- x表示摧毁x村,R表示修好刚被摧毁的村子,Q-x,表示询问你x所在的村子附近连着一共有多少村子是没有摧毁的。 思路: 用树状数组记录被摧毁的村子的和,p[x],表示1-x共有多少村子被摧毁, 然后我们可以用二分查找进行解答,当你询问x村时,如果x村已经被摧毁,那就输出0,否则先找出1-x村有多少被摧毁,假设n个被摧毁,这个时候我们就可以用 二分查找,找出x最...原创 2019-08-01 17:29:09 · 215 阅读 · 0 评论 -
POJ3468_A Simple Problem with Integers(树状数组or线段树)
题意: 输入 n, m表初始有 n 个数, 接下来 m 行输入两种操作: Q x y 表示询问区间 [x, y]的和; C x y z 表示区间 [x, y] 内所有数加上 z 。 思路: 线段树模板题。区间更新,区间求和查询也可以用树状数组来做。 摘自:https://www.cnblogs.com/RabbitHu/p/BIT.html 先回顾区间更新,单点查询的树状数组。 再来看区间修改,...原创 2019-08-05 18:46:41 · 280 阅读 · 0 评论 -
Hdu3468_Median Filter(树状数组求中位数)
题意: 中值滤波,求在n * n的矩阵中,内(n-2r) * (n-2r)的中值滤波后的子矩阵。 中值滤波的方式就是对于每一个可以取到的以(i,j)为矩阵中心的(2r+1)(2*r+1)的子矩阵,将子矩阵中所有数排序后的中位数作为新值,新值不影响后面的值。 思路: 设窗口为一个边长为(2*r+1)的正方形,每个正方形的中心都要被它范围内的中位数替换。窗口在滑动的过程中,比如向右滑1单位,则左边一列...原创 2019-08-04 20:01:05 · 418 阅读 · 0 评论 -
POJ2985_The k-th Largest Group(树状数组)
转自:https://www.cnblogs.com/wuyiqi/archive/2011/12/25/2301071.html 题意: 首先给你N只老鼠,M个操作;最开始一只老鼠一个组; 输入0,输入两个数i,j;使得i老鼠与j老鼠的组合并; 输入1,输入一个数K,求第K大的组有多少只老鼠。 思路: 第K大就是第n-k+1小,用树状数组求第K小。 觉得:https://www.cnblogs....转载 2019-08-04 18:11:17 · 348 阅读 · 0 评论 -
Hdu4605_Magic Ball Game(DFS+树状数组+离散化+离线处理)
题意: 给你一棵二叉树,每个节点上都有一个值。 然后对于每次询问,对于一个球 (pos , weight),球的目标是到达pos ,球的重量为weight ,球从根节点开始往下走。 如果当前节点的值大于球的重量,那么往两边走的概率都是1/2。 如果当前节点的值小于球的重量,那么球往左边走的概率是1/8,右边走的概率是7/8。 如果两者相等,那么球就会停在该节点上。 最后输出从根节点到pos的概率,...原创 2019-08-04 10:48:47 · 386 阅读 · 0 评论 -
Hdu3465_Life is a Line(区间内统计直线的交点个数)
题意: 给出 一个区间 ( l r),给出 n条直线,问这些直线有多少交点在区间内 思路: 区间的两个端点作为两边x和y。求出直线在两个端点的值。先按照Y升序排序,给它编号,然后按照x升序排序,相等则按照y升序。由于已经按照x升序排序,每读到一条边,只需统计当期有多少y比他大,就有多少交点。 注意和y轴平行的那些直线!!! #include <cstdio> #include &...原创 2019-08-03 13:41:10 · 292 阅读 · 0 评论 -
POJ3067_Japan(交叉统计转为逆序数)
题意: 日本岛东海岸与西海岸分别有N和M个城市,现在修高速公路连接东西海岸的城市,求高速公路的交点个数。 思路: 东边这边的编号为x,西边为y。(x1,y1)和(x2,y2)交叉时:(x2-x1)*(y2-y1) < 0;也就是要求x和y的大小关系相反。先把x升序固定,然后从头一条边一条边看有多少y大于当前的y,就有多少交叉点。因为可能有多条边出自同一个x,所以排序的时候先按照x升序排序,如...原创 2019-08-03 12:21:54 · 318 阅读 · 0 评论 -
Hdu3584_Cube(三维树状数组)
题意: 三维的空间中有两个操作,初始时每个空间元素均为0,然后更新操作是0变1,1变0,是一个空间内的所有元素都更新,然后查询是问这个点的元素是0还是1 思路: 区间更新,点查询的三维树状数组。记录改变的次数,次数为奇数则最终为1,偶则为0。 更新(x1,y1,z1)—(x2,y2,z2)的立方体,如果只更新(x1,y1,z1)则会把更大区间的也更新了,所以利用容斥原理,再去掉多余的,因为更新是+...原创 2019-08-03 10:54:07 · 244 阅读 · 0 评论 -
Hdu5480_Conturbatio(区间求和)
题意: 在一个棋盘上有一些"车",他能够攻击到与它同一行或者同一列的棋盘上的所有的格子,现在给出K个棋子的坐标,然后有Q组询问,每一次询问(x1,y1,x2,y2)这个方格内的所有棋子是否能够全部被攻击到。 思路: 每读入一个车,对其横坐标和纵坐标都维护一个攻击范围。然后查询的时候,如果sum(x2) - sum(x1-1) == x2-x1+ 1,说明全部的行都在攻击范围以内,输出Yes。列同理...原创 2019-08-02 22:36:15 · 197 阅读 · 0 评论 -
Hdu2482_PingPong(树状数组)
题意: 由西向东的给定n个人的rank值, 一场比赛的举行必须是裁判的rank值和它的位置都处于要进行比赛的两个人之间, 问最多可以举行多少场比赛. 思路: 枚举裁判,设裁判左边有多少比他小的有a个,比他大的有b个,右边比他小的有c个,比他大的有d个。那么答案就是ad+bc。所以需要两个树状数组来维护。 #include <cstdio> #include <cstring>...原创 2019-08-02 21:27:15 · 231 阅读 · 0 评论 -
SPOJ3267——D-query(主席树)
题意: 输入N个数字,查询区间[L,R]中有多少个不同的数字 思路: 主席树 每个位置上保存一个值。保存每个数的位置信息,如果这个数没有出现过,当前位置+1,如果出现过,将之前出现的位置-1,当前位置+1 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ...原创 2019-09-05 17:03:15 · 266 阅读 · 0 评论
分享