![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树与树状数组
文章平均质量分 76
立華奏
这个作者很懒,什么都没留下…
展开
-
线段树与树状数组
线段树是一种将数组而分成若干段的二分查找树,通过段记录段修改来更新数据来求得答案的一种数据结构算法。题目:http://acm.hdu.edu.cn/showproblem.php?pid=1166思路:线段树水题。AC代码:#include#includeusing namespace std;const int M = 50000 + 10;stru原创 2014-03-27 22:46:07 · 652 阅读 · 0 评论 -
hdoj 5023 线段树+位压缩
hdoj 5023题意:给一个全是2的序列,进行若干操作,将某区间修改为任意数字或询问区间内的有哪些数字。思路:线段树水题,用位压缩一下就好。#include #include #include using namespace std;const int M = 1000020;struct Tree{ int l, r, color; bool flag;原创 2015-08-05 19:24:19 · 334 阅读 · 0 评论 -
hdoj 5289 线段树
hdoj 5289题意:给n个数字,问有多少区间[i, j](i 思路:从左起依次寻找能到达的最右端的区间,答案累加 r - l。#include #include const int M = 100005;inline int max(int a, int b){ return a > b ? a : b;}inline int min(int a, int b){原创 2015-08-27 14:58:38 · 376 阅读 · 0 评论 -
hdu 5124
hdu 5124这个题还是比较水的,记篇博客是因为解题思路比较好。题意:n条线段覆盖,问被覆盖最多的点是被多少条线段覆盖。思路:1)离散化+树状数组(O(nlogn))树状数组可由单点修改区间查询改为区间修改单点查询,因为树状数组求和是求二进制前缀和,所以如果是在区间[l,r]增加d,可以add(l,d),add(r + 1,-d),因为更新是更新后缀,而求和是求前缀和,所原创 2015-01-02 23:51:02 · 482 阅读 · 0 评论 -
树状数组应用:区间去重求和 hdoj 3333
之前遇到过一个一样的问题用的分块做的详见http://blog.csdn.net/elicococoo/article/details/24061193原创 2014-08-05 20:55:28 · 840 阅读 · 0 评论 -
hdoj 2492
I hate Ping Pong!题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492题意:原创 2014-04-04 13:07:27 · 373 阅读 · 0 评论 -
hdoj 1556
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556原创 2014-04-04 16:49:53 · 533 阅读 · 0 评论 -
树状数组+离散化求逆序对
经典的求逆序对问题,在之前写过的一篇文章(《关于merge sort》(http://blog.csdn.net/elicococoo/article/details/18090743))中写了如何用merge sort的方法来解这个题,现在记录一下如何用树状数组+离散化求解。题目:poj:http://poj.org/problem?id=2299思路:1.逆序对的特点就是(升序原创 2014-03-27 23:57:59 · 939 阅读 · 0 评论 -
hdoj 4417
题目:hdoj : http://acm.hdu.edu.cn/showproblem.php?pid=4417思路:将砖块与问题都按高度排序,并用变量标记其位置,之后利用树状数组的特点,在每个问题询问前将这个高度前的砖块更新入树状数组中,之后查询并将结果记录在ans数组中即可。AC代码:#include#include#includeusing namespace st原创 2014-03-28 16:59:03 · 939 阅读 · 0 评论 -
hdoj 4747 线段树
hdoj 4747题意:给一个序列,问所有区间[i,j](i思路:看样例:1 0 2 0 1做出以第一个元素1为起点的分别到其他各点的所有区间最小值:0 2 3 3 3发现是一个单调递增序列,实际上对于任何一个样例都是这样的结果,因为随着数字的增加,最小值只会增大。然后我们删掉第一个数字,做第二个元素0的区间最小值:x 1 1 1 3因为我们删掉了0之前的1原创 2015-08-07 13:06:22 · 537 阅读 · 0 评论