zoukankan      html  css  js  c++  java
  • 线段树题目总结

    一、单点更新

           1.hdu1166 敌兵布阵:有N个兵营。每一个兵营都给出了人数ai(下标从1開始)。有四种命令,(1)”Addij",表示第i个营地添加j人。(2)“Sub i j”,表示第i个营地降低j人。(3)“Query ij",查询第i个营地到第j个营地的总人数。(4)”End“,表示命令结束。解题报告Here

           2.hdu1754 I Hate It:给你N个数,M个操作,操作分两类。(1)"QAB“,查询区间[A,B]内的最大值。(2)"UAB"。将第A个数的值改成B。解题报告Here

           3.hdu1394Minimum Inversion Number:给你N个数。要求统计它的全部形式的逆序对的最小值。它的全部形式的意思是,不断将数组开头的第一个数放到数组的最后面。解题报告Here

           4.hdu2795 Billboard:有一块板,规格为h*w。然后有n张海报,每张海报的规格为1*wi。选择贴海报的位置是:尽量高,同一高度,选择尽量靠左的地方。要求输出每张海报的高度位置。解题报告Here

           5.poj2828 BuyTickets:有N个人排队。每个人都有一个val来相应,每个后来人都会插入当前队伍的某一个位置pos。

    要求把队伍最后的状态输出。解题报告Here

           6.poj2886 Who Getsthe Most Candies?: N个小孩围成一圈。他们被顺时针编号为 1 到 N。每一个小孩手中有一个卡片,上面有一个非 0 的数字,游戏从第 K 个小孩開始。他告诉其它小孩他卡片上的数字并离开这个圈,他卡片上的数字 A 表明了下一个离开的小孩,假设 A 是大于 0 的,则下个离开的是左手边第 A 个,假设是小于 0 的,则是右手边的第 A 个小孩。游戏将直到全部小孩都离开,在游戏中,第 p 个离开的小孩将得到 F(p) 个糖果,F(p) 是 p 的约数的个数。问谁将得到最多的糖果。输出最幸运的小孩的名字和他能够得到的糖果。

    解题报告Here

           7.hdu4288 Coder & CF85-DSum of Medians:有三种类型的操作,(1)."add x",表示往集合里加入数x。(2).“del x”表示将集合中数x删除。(3).“sum”求出从小到大排列的集合中下标模5为3的数的和。集合中的数都是唯一的。解题报告Here

           8.CodeforcesBeta Round #19 D. Points:有三种操作“add x y”往平面上加入(x,y)这个点。"remove x y",将平面上已经存在的点(x,y)删除,“find x y”找出平面上坐标严格大于(x,y)的点。假设有多个点找x最小的,再找y最小的。解题报告Here

           9.poj2481 Cows:有N头牛。每仅仅牛有一个測试值[S,E],假设对于牛i和牛j来说,它们的測验值满足以下的条件则证明牛i比牛j强壮:Si <=Sjand Ej <= Ei and Ei - Si > Ej - Sj。如今已知每一头牛的測验值。要求输出每头牛有几头牛比其强壮。解题报告Here

           10.hdu3950 Parking Log:有T组測试数据,每组数据的N和Q分别表示停车场有N个位置(下标从1開始)。Q个操作。

    操作有两种(1)"A M L R",表示这个车队有M辆车,假设前面的空位,要求与前面的车的距离不超过L,假设后面有车。要求与后面的车的距离不超过R,假设前面或后面没有车。条件L,R的限制忽略,假设有满足条件的位置输出起点的下标。假设有多个满足条件的位置输出下标最小的一个。假设没有满足条件的位置,输出-1。

    (2)"BK",表示从左到右数第k个车队离开。解题报告Here

           11.hdu4521 小明系列问题——小明序列: 有多组測试数据,每组数据的n和d表示,有n个数,求间距大于d的最长上升序列。解题报告Here

           12. CodeforcesBeta Round #99 (Div. 1) C Mushroom Gnomes - 2:有n棵树,m个蘑菇。每棵树有坐标a。高度h,向左边倒的概率,向右的概率(概率用0-100表示),向左倒范围[x-h,x)内的蘑菇被破坏,向右倒范围(x,x+h]范围内的蘑菇被破坏。每一个蘑菇有坐标b,及它的魔力值z。解题报告Here

           13.hdu 4605 Magic Ball Game:一个权值为X球从根节点開始下落,每落到一个节点的时候,1.假设X=W[i],或者没有儿子节点了。球停止下落。2.假设X<W[i],球各有1/2的概率落到左右儿子节点。

    3.假设X>W[i],球有1/8的概率落到左儿子,有7/8的概率落到右儿子。问球落到点v的概率是多少(概率用7^x/2^y表示。即输出x和y就能够)。解题报告Here

           14.URAL 1989 Subpalindromes:给你长度为N的字符串,有M个操作。操作有两种类型(1)“change i a”。表示将第i个字符变成a。(2)“palindrome? j k”,询问[j,k]的字符串是否构成回文串。解题报告Here

           15.hdu 4777 Rabbit Kingdom:给N个数。有M个查询,问区间[L,R]之间有多少个数与这个区间内的其它数都互质。解题报告Here

    二、成段更新

            简单的说明:成段更新须要用到延迟标记(或者说懒惰标记)。简单来说就是每次更新的时候不要更新究竟。用延迟标记使得更新延迟到下次须要更新or询问到的时候。延迟标记的意思是:这个区间的左右儿子都须要被更新,可是当前区间已经更新了。

           1.hdu1698 Just a Hook:给你T组数据,N个数(初始时每一个数的值为1),M个操作。每一个操作把区间[a,b]里的数更新为c。问最后这N个数的和是多少。解题报告Here

           2.poj3468 A SimpleProblem with Integers:给你N个数。然后有M个操作。

    有两种类型的操作,(1)“Ca b c”,表示将区间[a,b]里的数加上c。(2)“Q a b”,表示查询区间[a,b]的数的和。解题报告Here

           3.poj2528 Mayor’sposters:有t组測试数据,有n张海报。海报按题目给出的顺序覆盖,问最后能看到几张海报。解题报告Here

           4.poj1436Horizontally Visible Segments:(题意没懂。。

           5.poj2991 Crane:有N根杆子,前后两根杆子通过一个节点连接。每一个节点能够旋转一定的角度,每次给你一个操作(s,a)表示将第s与s+1之间的角度改动为a度,而且每次操作之后都须要求出第N个节点的位置。

    解题报告Here

           6.uestc1425 Another LCIS:有T(t<10)组数据,给你N个数,M个操作(n和m都小于100000)。操作有两种类型。(1)“q a b”,查询区间[a,b]里的最长连续上升序列的长度。

    (2)“a l r v”。将区间[l,r]里的数所有添加v。解题报告Here

           7.uestc1546 Bracket Sequence:给你有N个字符的由'('或‘)'组成的括号序列,有三种操作(1)"set l r c",表示将区间[l,r]里的全部元素改变为c。c是'('或')'的当中一种。

    (2)"reverse l r",表示将区间[l,r]里的'('与')'对调。

    (3)"query l r",表示查询区间[l,r]是否为一个合法的括号序列。解题报告Here

           8.CodeforcesRound #136 (Div. 2) D. Little Elephant andArray:给你N个数M个查询,问在每个查询区间[l,r]范围内有多少个值为valu的数出现次数也为valu。解题报告Here。(这道题,成段更新查询点和单点更新查询区间都能够)

           9.Uva 12436 RipVan Winkle's Code:对于长度为250000的区间,给了你四种操作:操作A。从st到ed这段区间内的数,分别加上1,2,...,st-ed+1。操作B,从st到ed这段区间内的数,分别加上,st-ed+1,st-ed,...,1。操作C,将st到ed这段区间内的数赋值成x。

    操作S,查询st到ed的这段区间内的数的总和。解题报告Here

           10. CodeforcesRound #169 (Div. 2) E.Little Girl and Problemon Trees:一棵树有n个节点,可是除了根节点1外,其它节点都的出度和入度加起来就仅仅有2(就是棵树是由几条链的第一个节点粘在一起的),如今有两种操作(1)"0 v x d"。在距离v节点距离d以内的全部节点的权值都加上1,(2)"1 v"。查询节点v上的权值。解题报告Here

           11.CodeforcesBeta Round #35 (Div. 2) E. Parade:给你n个建筑的楼顶的高度,以及楼顶的左坐标l。右坐标r(能够看成是线段),问整个建筑的轮廓的转折点。解题报告Here

           12.Zoj3299 Fall the Brick:有n排板砖。m个木板,边界的l和r的n列板砖从天上掉下来,然后有m个边界的a,b的高度为h的木板去接那些板砖,一排板砖中的部分板砖假设掉到木板上就停止下落。剩下的继续下落。问最后每块木板上有多少块板砖。解题报告Here

           13.fzu2105 Digits Count:给你N个数。有四种操作。(1)"ANDopnL R"。表示对区间[L,R]内的数所有与opn进行且(&)操作。

    (2)"OR opn L R"。表示对区间[L,R]内的数所有与opn进行或(|)操作。(3)"XOR opn L R",表示对区间[L。R]内的数所有与opn进行异或(^)操作。

    (4)"SUMopnL R",求出区间[L。R]的数的和。解题报告Here

           14.hdu 4533 威威猫系列故事——晒被子:给你N个矩形。每一个矩形给出左下角坐标,右上角坐标。有M个询问。每一个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算)。解题报告Here

           15.URAL 1855 Trade Guilds of Erathia:有N个城市,M个操作。城市形成一条链。下标分别从1到N。相邻城市有一条道路相连,初始通过每条道路的费用为0。有两种类型的操作,(1)"change a b d",表示从城市a到城市b之间的每条道路的费用改变d(假设d大于0,添加,反之降低)。(2)"establish a b",表示查询在城市a到城市b之间随意选两个城市作为道路的起点和终点。问通过这些道路的平均费用。解题报告Here

           16.hdu 4578 Transformation:给你一个数组。初始值为零。有四种操作:(1)"1 x y c",代表 把区间 [x,y] 上的值所有加c。(2)"2 x y c",代表 把区间 [x,y] 上的值所有乘以c。(3)"3 x y c" 代表 把区间 [x,y]上的值所有赋值为c。

    (4)"4 x y p" 代表 求区间 [x,y] 上值的p次方和1<=p<=3。

    解题报告Here

           17.hdu 4455 Substrings:给定一个整数串,有Q组询问。问这个串中长度为W的子串中不同的数字之和为多少。

    解题报告Here

           18.hdu 4614 Vases and Flowers:给定一个区间[0,N-1],初始时每一个位置上的数字都是0,有两种操作,1.在位置A開始寻找F(假设没有这么多,则有多少个就找多少个)个数值为0的位置,把位置上的数改动为1,并返回第一个和最后一个改动的位置。2.查询区间[A,B]内1的个数,并把区间[A,B]每一个位置上的数改动为0。

    解题报告Here


           19.hdu 4747 Mex:给你N个数,枚举全部的L和R。问由区间[L,R]之间的数构成的集合里,哪一个数字没有出现。假设有多个,找出最早的一个,设其为x,求所以x的和。解题报告Here


           20.zoj 3724 Delivery:N个点。对于每一个点i,都有一条连向i+1的有向边,另外有M条其它的有向边,有Q个询问(U,V)求U到V的最短路。解题报告Here

           21.cf343D Water Tree:一棵树有N个节点,有三种操作(1)“1 v"。表示将以点v为根节点的子树所有赋值为1。(2)"2 v"。表示将点v以及点v的所有祖先节点所有赋值为0,(3)"3 v",表示查询点v的值。解题报告Here。

    解题报告Here

           22.URAL 1977 Energy Wall有N(N<10^9)个点,P(P<10^5)个操作。每一秒过后,所以的数都会加上一个值T,每一个操作前都有操作的时间,初始的时间是0,操作有两种类型,(1)"save l r",表示求区间[L,R]之间的所以数的和,并加到tot里。然后把[L,R]清空为零。(2)"enforce i d",表示点i-d+1和点i+d-1加上值X,点i-d+2和点i+d-2加上值2*X……而且,最后全部数加上的X的和等于tot。这个操作之后,tot清零。解题报告Here


    三、区间合并

    区间合并是在线段树查询的时候,对当前区间的左右儿子进行合并。

           1.poj3667 Hotel:有N个房间,M次操作。有两种操作(1)"1a",表示找到连续的长度为a的空房间,假设有多解,优先左边的。即表示入住。(2)"2 b len",把起点为b长度的len的房间清空,即退房。解题报告Here

           2.hdu3308 LCIS:给你N个整数。有两种操作,(1)"U A B",表示把第A个数变成B。"QAB",表示查询区间[A,B]的最长连续上升序列。解题报告Here

           3.hdu3397 Sequence operation:有N个为0或为1的数,有M个操作,操作有5种类型。(1)“0 a b”。表示将区间[a,b]范围内的数所有置0。(2)“1 a b”,表示将区间[a,b]内的数所有置1。

    (3)"2 a b",表示将区间[a,b]内的数0变成1。1变成0。

    (4)"3ab"。表示查询[a,b]范围内1的数。(5)"4 a b"。表示查询[a,b]范围内最长的连续的1。解题报告Here

           4.hdu2871 Memory Control:给N个单位内存(编号从1開始),有4种操作,(1)"Reset"。表示把全部的内存清空,然后输出"Reset Now"。(2)"New x"。表示申请一块长度为x的内存块(如多解,左边优先),然后输出"New at A",A表示该内存块的起点。(3)"Free x",表示把包括第x块单位内存的内存块清除,然后输出"Free from A toB"。A和B分别表示该内存块的起点和终点(4)"Get x",表示返回第x块内存块的起始内存单位编号,然后输出 "Get at A"。解题报告Here

           5.hdu1540 Tunnel Warfare:有N个村子排成一条直线。每一个村子都连接了它的左右两个村子(除了最左边和最右边的外)。有3种操作,(1)"D x"。表示将第x个村子摧毁。(2)"Qx",表示查询与第x个村子直接和间接相连的村子有多少个。

    (3)"R"。表示将最早摧毁的村子复原。解题报告Here

           6.CodeforcesBeta Round #43 D. Parking Lot:有一条长度为L的街道,有N个操作,操作有两种,(1)"1 a"。表示有一辆长度为a的车开进来想找停车位,停车位必须满足与它前面的车距离至少为b,与后面的车距离至少为f.假设能找到这种停车位,输出这辆车的起始位置(且这个位置最小),否则输出-1。(2)"2 a",表示第a个事件里进来停车的那辆车开出去了。解题报告Here

    四、扫描线

           1.hdu1542 Atlantis:给你N个矩形,每一个矩形给出左下角的坐标,右上角的坐标。最后以N=0为结束。

    要你求出矩形并后的面积。解题报告Here

           2.hdu1828 Picture &poj 1177 Picture:给你N个矩形,每一个矩形给出左下角的坐标,右上角的坐标,要求矩形并后的周长。解题报告Here

           3.hdu1255 覆盖的面积:有T组測试数据,每组数据先给一个数字N,接下来的N行里,每行四个浮点数表示矩形的左上角坐标和右下角坐标,要求这些矩形至少覆盖过两次的面积。

    解题报告Here

           4.hdu 3642Get The Treasury:有T给測试数据,每组数据先给一个数字N,接下来的N行里,每行里有6个数字,各自是x1,y1,z1,x2,y2,z2,表示这个长方体x轴方向的范围从x1到x2,y坐标和z坐标类似,求至少有三个长方体相交的体积是多少。解题报告Here

           5.poj2482 Stars inYour Window:给你10000以内的星星的坐标和星星的亮度(即分别为x,y,c)。要求用W*H的矩形去围住一个区域,使得这个区域内的星星的亮度最大。而且要求矩形边框上的星星不计入内。矩形能够平移。但不能旋转。解题报告Here

    (PS:这题的题面好美~)

           6.poj2464 BrowniePoints II:在平面直角坐标系中给你N个点。stan和ollie玩一个游戏。首先stan在竖直方向上画一条直线,该直线必需要过当中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个stan之前画过的点。这时候平面就被切割成了四块,两个人这时候会有一个得分,stan的得分是平面上第1、3象限内的点的个数。ollie的得分是平面上第2、4象限内的点的个数。在统计的时候在所画线上的点都不计算在内。求终于stan使得自己的最差得分最高。而且输出此时ollie的得分。解题报告Here

           7.hdu3255 Farming :有N块农田,每块农田中种一种作物,每种作物都有一个价格,当在同一区域内种植了两种不同的作物时,作物价格大的生存下来,作物价格小的死亡。求最后的全部作物的能买的总钱数。

    解题报告Here

           8.uva 11983 WeirdAdvertisement:给出N个矩形。求被这些矩形覆盖K次以上的区域面积。解题报告Here

           9.hdu4052 Adding New Machine:给你W*H大小的矩形,当中有N个地区不能使用(给出了这个地区的两个顶点的坐标即(x1,y1)和(x2,y2))。问能下多少个1*M的矩形。解题报告Here

           10.uestc1525 Fruit Ninja:有T组測试数据,每组数据的N,H。W表示有N个炸弹或水果。H和W表示用来“切”水果的板砖的长宽,要求W必须平行于X轴,H必须平行于Y轴。问一板砖下去,最多能拍到多少个水果(要求不能拍到炸弹),在拍到最多水果的前提下。问板砖有多少种拍水果的方案(即假设板砖的四条边上都要水果“牺牲”。那么方案数计一。否则板砖就可移动。那么方案数就是so many!)。

    解题报告Here

           11.hdu4419 Colourful Rectangle:给你10000个三种颜色的矩形,不同颜色的矩形相互覆盖会形成不同的颜色。问形成的七种颜色的面积是多少。

    解题报告Here

           12.zoj 3521 Fairy Wars:平面上有N个子弹。每一个子弹的坐标已知。如今在距离点x0,y0为R的圆内,所以的子弹都会变成冰块L*L。而且在L*L范围内的全部其它子弹也会变成冰块,问,当连锁反应结束时,变成冰块的子弹数有多少。

    解题报告Here
           13.zoj 3525 Disappearance:有三维的空间里有N个点(N<5000)。要求用一个长方体LB*LW*LH去包围一些点。使得长方体内的点的权值和最小。解题报告Here




    五、其它

           1.hdu3954 Level up:有N个英雄,每一个英雄的初始等级为1。初始经验为0。有K个等级,QW个操作。接下来一行中有K-1个数值,代表升到等级2,等级3……所要达到的经验。接下来的QW行里。每行是一个操作,操作有两类,(1)"l r e"。代表区间[l,r]里的每一个英雄将得到e乘以他的等级的经验。

    (2)"lr"。表示查询区间[l,r]里经验最大值。

    解题报告Here

           2.hdu4027 Can you answer these queries?:给你N个数,有M个操作,操作有两类,(1)"0 l r"。表示将区间[l,r]里的每一个数都开根号。

    (2)"1 l r",表示查询区间[l,r]里全部数的和。

    解题报告Here

           3.hdu3333Turing Tree & hdu3874Necklace:有T组数据,每给数据有N个数。有Q个查询,每一个查询要求区间[l,r]之间数的和,可是出现多次的某个值仅仅能算出现一次。解题报告Here

           4.hdu3016 Man Down:有N块木板。每块木板有四个属性,高h(h>0),左边界xl,右边界xr,以及掉落在它上面。获得多少生命值value(可能为负),一个人从最高的木板開始往下跳。初始时生命值为100。问最后掉落到地面能获得的生命值最多为多少(假设生命值为0,那么这个人会死去),假设无法跳到地面,输出-1。

    解题报告Here

           5.hdu3340 Rain in ACStar:天上掉下一些图形(三边、四边、五边形)在数轴上。求数轴上某一段区间落下的图形的面积和。解题报告Here

           6.ZOJ3511 Cake Robbery:有一个N凸边形。顺时针编号1到N。沿对角线切了M刀。保证随意两刀之间不相交(除了端点),问在切这M刀的过程中,得到的凸多边形的最大的边数是多少。

    解题报告Here

           7.UESTC1558 Charitable Exchange:star開始有1元的东西,有N种交易,每种交易Vi,Ri,Ti表示用至少Ri的东西去换得Vi的东西。这个过程要求的时候是Ti。

    问最后得到至少M元的东西。假设能得到花费的最少的时间是多少。

    解题报告Here

           8.spojGSS21557 Canyou answer these queries II:题意:给你N个数,每一个数a[i]的范围在[-100000,100000]。然后有Q个查询,每一个查询问区间[x,y]内最大子区间和为多少,而且反复出现的值仅仅能计算一次(假设是负数,输出0,即能够子区间能够为空)。

    解题报告Here

           9.poj3162 WalkingRace:给你一棵有N个节点的树,树边为权值,要你求出树上每一个点到其它点的距离中最大的那个值。

    对求出的从节点1到节点n最大值,找出最长的一段使得这一段中最大值减最小值的结点小于等于M。

    解题报告Here

           10.hdu4358 Boring counting:给你一棵树。树上的每一个节点都有树值。给M个查询。问以每一个点u为根的子树下有多少种权值恰好出现k次。解题报告Here

           11.hdu4267 A Simple Problem with Integers:给你两个操作。,(1)“1 a b k c”。表示在区间[a,b]内位置满足(i-a)%k=0的数加上c。k的范围在1到10之间。(2)“2 a”,表示查询第a个数。解题报告Here

    (解题报告里用树状数组做的)

           12.hdu4417 Super Mario:给你N个数,M个查询,对于一个查询问在[a,b]范围内小于c的数有多少个。解题报告Here

    (解题报告里用树状数组做的)

           13.UVALive4730 Kingdom:在二维坐标平面上,有N个城市,M个操作。操作有两类,(1)(1)"road A B",表示将城市A和城市B通过一条道路连接,假设A和B原来属于不同的城市群。经过这个操作,A和B就在一个城市群里了,保证每条道路不会和其它道路相交(除了端点A和B)。(2)"lineC",表示查询当穿过y=C的直线,有多少个城市群、这几个城市群一共同拥有多少个城市。

    解题报告Here

           14.CodeforcesRound #163 (Div. 2) E. More Queries toArray...:题意:有N个数,M个操作。(1)"= l rk"。表示把区间[l,r]的数所有变成k。(2)"? l rk",查询区间[l,r]范围里。式子ai*(i-l+1)^k的和。

    解题报告Here

           15.hdu 4638 Group:给你一个1~N的排列,问区间[L, R] 之间有多少段连续的数。

    比方区间里有3、1、2、5、6,这五个数。那么就有3、1、2和5、6这两段。

    解题报告Here

           16.hdu 4630 No Pain No Game:给出一个N和1到N的某个排列,询问Q次,每次询问[L,R]区间内随意挑两个数。最大公约数的最大值是多少。解题报告Here





  • 相关阅读:
    CCNA 第二章 以太网回顾
    CCNA 第一章 网络互联
    solidworks中 toolbox调用出现未配置的解决方法
    linux之df命令
    linux之du命令
    linux之pid文件
    linux之mysql启动问题
    linux之使用cron,logrotate管理日志文件
    wordpress(一)wordpress环境的搭建
    phpwind8.7升级9.0.1过程(四)20130207升级到20141228
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5347642.html
Copyright © 2011-2022 走看看