线段树&树状数组
文章平均质量分 76
AC_Gibson
这个作者很懒,什么都没留下…
展开
-
HDU1754 I Hate It 线段树区间最值
题目链接:点击打开链接//线段树区间最值#include #include #include #include #include using namespace std;#define maxn 200005int num[maxn]; //纪录每个学生的成绩struct segmentree{ int l; //左端点 int r; //右端点原创 2015-05-13 15:34:48 · 633 阅读 · 0 评论 -
HDU1556 Color the ball 树状数组(区间更新单点求值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556树状数组实现代码如下://树状数组纪录每个点的改变值#include #include using namespace std;const int M=100010;int a[M],n;int lowbit(int i){ return i&(-i)原创 2015-10-10 14:06:20 · 680 阅读 · 0 评论 -
POJ1151 Atlantis 线段树+扫描线(离散化)
题目链接:http://poj.org/problem?id=1151题目大意:给你一些矩形,其顶点坐标是浮点数,可能相互重叠,问这些矩形覆盖到的面积是多少。分析:我们将Y轴进行离散化,n个矩形的2n条边界,最多可将Y轴分成2n-1个区域,我们对这些区间进行编号,建立线段树。const int M=210;struct segment{ int l,r;原创 2015-10-09 15:58:13 · 489 阅读 · 0 评论 -
HDU1166 敌兵布阵 线段树区间求和||树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166线段树实现代码如下://线段树区间求和#include #include #include #include #include using namespace std;#define maxn 50005int num[maxn];struct se原创 2015-05-13 14:07:16 · 524 阅读 · 0 评论 -
POJ1436 Horizontally Visible Segments 线段树区间更新--区间覆盖
题目链接:http://poj.org/problem?id=1436题目大意:有n条平行于y轴的线段,定义两线段可见,当且仅当这两条线段可以被一条水平线链接,且该水平线段不经过其他垂线段;定义三角形线段为两两可见的三条垂线段。现在给出n条线段,问你一共有多少组三角形线段。分析:区间覆盖问题,POJ2777的升级版。两条线段a和b可见,就是说在存在某一区间[l,r],使得在原创 2015-10-09 12:17:13 · 481 阅读 · 0 评论 -
HDU2838 Cow Sorting 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2838题目大意:Sherlock有N(1≤N≤100,000)头牛一字排开,在晚上挤奶。每头奶牛都有一个唯一的“坏脾气”的值,它们的坏脾气的范围为1... 100,000。由于脾气暴躁的奶牛更容易损坏Sherlock的挤奶设备,福尔摩斯想给奶牛重新排序,使它们按坏脾气增加的顺序排列。在此过程原创 2015-10-10 21:25:03 · 545 阅读 · 0 评论 -
HDU2642 Stars 二维树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2642题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星。为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗。最开始,没有明亮的星星在天空中,然后将给出一些信息,“B XY”,其中“B”代表明亮,x代表X坐标和Y代表Y坐标是指在(X,Y)的明星是光明的原创 2015-10-11 21:16:43 · 714 阅读 · 0 评论 -
HDU3584 Cube 三维树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3584题目大意:给定一个N* N* N多维数据集A,其元素是0或1。A[I,j,k]代表集合中中的第i行,第j列与第k层的值。首先,我们有A [i,j,k]= 0(1我们定义了两个操作,1:“Not”,我们改变A [i,j,k]=!A [i,j,k]的操作。这意味着我们改变A[i,j,k原创 2015-10-11 21:40:57 · 504 阅读 · 0 评论 -
POJ1195 Mobile phones 二维树状数组
题目链接:http://poj.org/problem?id=1195题目大意:给出一个n*n的矩阵,两种操作:“1 x y v”表示将矩阵上的点(x,y)加上v;“2 x1 y1 x y”表示查询矩阵的和。分析:和HDU2645 Stars类似,很裸的二维树状数组的题。实现代码如下:#include #include #include using n原创 2015-10-12 16:59:09 · 534 阅读 · 0 评论 -
POJ2155 Matrix 二维树状数组
题目链接:http://poj.org/problem?id=2155题目大意:N * N 的矩阵,每个元素要么是0,要么是1,开始全0不断进行两种操作:(1)C x1 y1 x2 y2 表示要将左上角为(x1,y1),右下角为(x2,y2)的子矩阵里的全部元素都取反(0变1,1变0)(1(2)Q x y 查询(x,y)处元素的值。分析:HDU3584 Cube的简原创 2015-10-12 19:11:16 · 444 阅读 · 0 评论 -
HDU1541 Stars 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541题目大意:有n颗星星,每颗星星的权值为它左下角的星星的个数(不包括它本身),现在按y升序(y上按x升序)给出你n个星星的坐标,输出权值为0,1,...,n-1的星星的数目。分析:刚开始用二维树状数组做的,MLE了,没用到题中给出的输入次序。按照题中的输入次序,由于是按y升序原创 2015-10-12 15:39:13 · 410 阅读 · 0 评论 -
HDU2689 Sort it 逆序数-线段树单点更新
逆序数是这样定义的:有一个序列n1,n2,n2....,对于序列中每一个元素i来说,排在其前面的数中(即1到i-1中的数),比ni大的元素的个数的总和,叫做这个序列的逆序数。 通俗点说就是,找出序列中每一个满足的这样一种关系的i和j的对数,就是对于i>j&&a(i) 逆序数有一个非常常用的性质:最少需经过m次交换,可以使一个序列变成升序。其中m为该序列的逆序数。题目原创 2014-12-17 19:11:40 · 891 阅读 · 0 评论 -
POJ2299 Ultra-QuickSort 树状数组+离散化
题目链接:http://poj.org/problem?id=2299题目大意:在某些问题上,你必须分析特定的排序算法。 该算法处理一系列n个不同的整数通过交换两个相邻序列元素,直到按升序排序序列。 对输入序列 9 1 0 5 4,超快速排序生成的输出 0 1 4 5 9。你的任务是确定超快速排序需要执行多少互换操作对于给定输入序列。输入:测原创 2015-10-12 16:39:25 · 519 阅读 · 0 评论 -
POJ2777 Count Color 线段树区间更新
题目链接:http://poj.org/problem?id=2777题目大意:一个长为L的线段,两种操作:“C a b c”表示将区间[a,b]染成颜色c,“P a b”输出区间[a,b]内一共有多少种不同的颜色。分析:很裸的线段树区间操作的题,注意到颜色种类一共不超过30种,我们可以把它对应到二进制中的每一位。实现代码如下:#include #incl原创 2015-10-07 16:38:28 · 461 阅读 · 0 评论 -
POJ3225 Help with Intervals 线段树区间更新
题目链接:http://poj.org/problem?id=3225题目大意:给出区间操作交,并,补,差,和异或,问你在n次操作之后的区间是什么。分析:这里我们用区间倍增来解决区间的开闭问题,然后对于每一种操作,我们用01表示该段区间是否存在。实现代码如下:/*倍增区间来解决区间的开闭问题,对于区间操作:U:把区间[l,r]覆盖成1I:把[-∞,l)原创 2015-10-06 16:58:30 · 514 阅读 · 0 评论 -
POJ2828 Buy Tickets 线段树单点更新
题目链接:点击打开链接题目大意:有n个人,第i行表示的是第i个人(其编号为val[ i ])插到第pos[ i ]个人的后面,问你n次插队之后的最终结果,按排队顺序输出每个人的编号。分析:我们先把第一个人插入队中,然后顺序再插入一个人的时候,我们就需要更新其插入位置之后的所有位置,这样最坏的情况下就是O(n!)的复杂度了。但是如果换一种思维,我们注意到,最后一个人插原创 2015-05-18 15:58:31 · 595 阅读 · 0 评论 -
HDU2795 Billboard 线段树单点更新变形
题目链接:点击打开链接题目大意:有一个h×w的广告牌和n条1×wi的通知,每条通知总是尽可能的往上同时又尽可能往左贴在广告牌上,找出每条通知在广告牌上我位置高度,如果不能贴在广告牌上,位置高度为-1.#include #include #include using namespace std;#define maxn 200005int num[maxn<<2];原创 2015-05-14 13:13:28 · 537 阅读 · 0 评论 -
HDU5249 KPI 树状数组+二分(或set容器类)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5249分析:树状数组纪录元素排序后的下标,然后二分查找中位数。树状数组+二分实现代码如下:#include #include #include #include #include using namespace std;const int maxn=10005;原创 2015-06-02 12:55:05 · 617 阅读 · 0 评论 -
POJ3264 Balanced Lineup 线段树||RMQ
题目链接:http://poj.org/problem?id=3264题目大意:给出一个序列,Q次查询,每次查询找出该区间内最大值和最小值的差。分析:线段树和RMQ都可以。线段树实现代码如下(2412K,2188MS):#include #include #include using namespace std;const int maxn=5000原创 2015-08-24 09:45:21 · 447 阅读 · 0 评论 -
POJ2886 Who Gets the Most Candies? 线段树单点更新+反素数
题目链接:http://poj.org/problem?id=2886题目大意:n个小朋友站成一个圈做游戏,每个小朋友手中有一个非零数字num(整数代表从这点起顺时针数num个人,负数代表逆时针数num个人),游戏开始时第k个人出列,然后下一个出列的人为上一个出列人手中数字所指的人,以此类推,直到所有人都出列为止。F(p)为第p个出列的人得到的糖果数量,定义F(p)为p的约数的个数,找原创 2015-08-25 10:02:15 · 634 阅读 · 0 评论 -
HDU1394 Minimum Inversion Number 逆序数- 线段树单点更新求
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394题目大意:给出一个长度为n的序列,序列中元素的值包含0到n-1,我们把第一个元素移到最后面,其他元素位置不变,得到一个新的序列,这样我们一个可以得到n个不同的序列,找出这n个序列中最小的逆序数。分析:比HDU2689多了一步,我们在找出第一个序列的逆序数之后,如果把第一个元原创 2015-08-26 10:22:29 · 463 阅读 · 0 评论 -
HDU2852 KiKi's K-Number 线段树单点更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852题目大意:给定一个容器有3中操作:“0 x”表示插入元素x;“1 x”表示删除元素x(如果x不存在输出”No Elment!”);“2 x k”表示查询比x大的数中,第k个元素的值(同理,不存在该值输出“Not Find!”)。给你m个操作(m小于10^6),分别模拟每种操作。原创 2015-08-27 09:40:13 · 476 阅读 · 0 评论 -
HDU1698 Just a Hook 线段树成段更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698题目大意:有一个长度为n(100000)的钩子,没个单位长度的钩子有金,银,铜三者之一构成,价值分别为3,2,1,现在进行Q(100000)次操作,每次操作表示把一个区间[l,r]内的钩子变成一种颜色,问Q次操作之后钩子的总价值。分析:我们用线段树来纪录每一个区间内的颜色,原创 2015-08-28 15:45:19 · 371 阅读 · 0 评论 -
POJ3468 A Simple Problem with Integers 线段树成段更新(lazy)
题目连接:http://poj.org/problem?id=3468题目大意:给出一个100000的序列,进行100000次操作,操作"C l r v"表示将区间[l,r]内的所有元素的值加上v;操作"Q l r"表示查询区间[l,r]的元素的和。实现代码如下://线段树成段更新:每次更新一个区间[l,r]#include using namespace std;原创 2015-05-14 09:30:02 · 551 阅读 · 0 评论 -
POJ2528 Mayor's posters 线段树区间更新+离散化
题目链接:http://poj.org/problem?id=2528题目大意:一个长度为10^7的墙上有n张海报,可能相互重叠,告诉你每张海报的宽度(高度都一样)和先后的叠放次序,问没有被完全盖住的海报有多少张(海报端点不会落在瓷砖中间)。分析:如果每个叶子节点都代表一块瓷砖,那么线段树会导致MLE,即单位区间的数目太多。实际上,由于最多有1W张海报,共计2W个端点,这些原创 2015-09-07 18:26:06 · 477 阅读 · 0 评论 -
HDU5475 An easy problem 线段树单点更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5475题目大意:给出一个数X,有两种操作:1 y表示将X乘上y,2 n表示将X除上第n个操作的y值(保证第n个操作存在且为1操作),给出Q次操作,输出每次操作之后的X%M的值。分析:取模操作只是在输出X时才进行,运算时并不取模,故直接做显然是不行的(java大整数做的当我没说),原创 2015-09-29 12:08:01 · 561 阅读 · 0 评论 -
HDU5493 Queue 线段树单点更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5493题目大意:一个队列中有n个身高不同的人,现在他们吃饭回来要站回原来的队列,每个人只记得他前面或后面有k个比他高的人,现在给你每个人的身高,要还原出一个字典序最小的队列。分析:和POJ2828 Buy Tickets有点相似,做法大体相同,我们先把这n个人按身高升序排序(定义原创 2015-10-06 11:22:48 · 481 阅读 · 0 评论 -
POJ2182 Lost Cows 线段树单点更新
题目链接:http://poj.org/problem?id=2182题目大意:有编号为1到n的n头牛按照某一编号排列,现在他们的顺序打乱了,FJ只记得每头牛前面有多少个牛的编号比它大,让还原出n头牛的原始队列。分析:对于最后一头牛来说,他前面编号比他大的牛的数目+1,就是它本身的编号,然后我们把它的编号移除,这样,对于倒数第二只牛,我们仍然可以这样做来得到它的编号,至于实原创 2015-10-13 15:06:24 · 531 阅读 · 0 评论