
线段树&树状数组
文章平均质量分 62
LBJHan
经历过就是财富
展开
-
HDU Billboard(线段树)
题意:一面广告墙,往上贴广告,每条广告高为1,广告墙高为h,贴广告时先从高处贴,每次都靠左上位置贴,不能覆盖其他广告,问每条广告分别在哪一行;如果广告贴不上,输出-1;题的数据特别大,h,w都是1e9,但是n是20w;所以最多n行就可以贴完;#include #include #include #include #include #define MAX 200010using原创 2017-08-12 14:03:33 · 226 阅读 · 0 评论 -
Mobile phones POJ - 1195 (二维树状数组)
Mobile phones 题目链接:POJ - 1195 题意:把一个矩阵分为S*S的方格,初始化为0,每次将(x, y)格子里增加a,或者求l<=x<=r&&b<=y<=t的矩阵内方格中数的和;这个题用二维的树状数组;其实和一维一样, 就是多个一维的摞起来构成了二维的;需要注意的是最后求出来的tr[r][t]-tr[l][b]并不是最...原创 2018-07-19 20:20:51 · 411 阅读 · 0 评论 -
Japan POJ - 3067 (树状数组)
Japan 题目链接:POJ - 3067 题意左右两边各有你n个, m个点由下向上,由1开始标号,有k条边,连接左右两边的点,每两条直线相交就有一个交点,不存在重点;问一共几个交点;思路:把k条边按左端点由小到大排序,再按右端点由小到大排序,然后开始连边,每加一条边产生的交点就是之前右端点比该边的右端点大的边的条数;因为我们已经按左端点排好序了,之前一定不会有左端点比他还大的了;...原创 2018-07-19 20:54:02 · 335 阅读 · 0 评论 -
Aninteresting game HDU - 5975 (树状数组lowbit深入理解)
Aninteresting game题目链接:HDU - 5975题意:有1~n个数,将i放入集合中时同时放入了[i-lowbit(i)+1, i-1]区间的数,每向集合中放入一个数就耗费一点体力,所以,向集合中放入i时就是同时放入[i-lowbit(i)+1, i]区间的数,共i-(lowbit(i)+1)+1=lowbit(i)个数,消耗的体力就是lowbit(i);问将区间[l,...原创 2018-07-22 08:44:33 · 445 阅读 · 2 评论 -
DZY Loves Colors CodeForces - 444C (线段树, 区间更新)
DZY Loves Colors 题目链接:CodeForces - 444C 题意:n个点,1~n标号,开始时,每个点的颜色标号等于本身编号,每个点的colorfulness值为0;如果将i点的颜色由x改为y,则i点的colorfulness值增加abs(x-y);现有两种操作:1 l r x:表示将区间[l, r]的点全部涂改为x颜色;2 l r:表示求区间[l, r]的colorfu...原创 2018-08-11 20:53:40 · 304 阅读 · 0 评论 -
The Child and Sequence CodeForces - 438D(线段树)
The Child and Sequence 题目链接:CodeForces - 438D题意:一共n个数,三种操作:1 l r :求区间[l, r]的和; 2 l r x :将区间[l, r]的所有数对x取模; 3 k x:将k处的数改为x;思路:如果区间的最大值都比要取模的数小,就不需要继续向下更新了,如果大,就看做单点更新;至于为什么不会T,恕在下太菜,不...原创 2018-08-11 21:36:08 · 214 阅读 · 0 评论 -
Black And White HDU - 3911 (线段树,区间更新)
Black And White 题目链接:HDU - 3911 题意:一个01串,两种操作,1 l r:将区间[l, r]中的1变为0, 0变为1; 0 l r :求区间[l, r]中最长的连续为1的子串的长度;思路:当改变区间[l, r]时,相当于对其进行与0的异或运算,同一区间操作两次相当于没有操作;在区间[l, r]中,令l_one记录由l向右开始最长连续...原创 2018-08-12 10:51:27 · 272 阅读 · 0 评论 -
Sequence operation HDU - 3397 (线段树,区间更新, 区间合并)
Sequence operation 题目链接:HDU - 3397 题意: HDU - 3911 的升级版;给出一个01串,5种操作:0 L R:区间[L ,R]全置为0;1 L R:区间[L, R]全置为1;2 L R :区间[L, R]中0变1,1变0;3 L R:求区间[L, R]中1的总个数;4 L R:求区间[L, R]中连续1的最长长度;可以先看H...原创 2018-08-12 13:43:52 · 316 阅读 · 0 评论 -
Magician HDU - 5316(线段树 , 单点更新+区间合并)
Magician题目链接:HDU - 5316 题意:n个数,由1~n编号,每个数的范围是[-1000000000, 1000000000],两种操作:0 a b :输出区间[a, b]中子序列的最大和,并且该子序列中的每两个相邻元素在原序列中的下标的奇偶性不同; 1 a b :将下标为a的数改为b;思路:这里的子序列并不需要连续;对于每段区间都有四种子序列:奇首奇尾(oo...原创 2018-08-13 09:43:50 · 406 阅读 · 0 评论 -
LCIS HDU - 3308(线段树 单点更新+区间合并)
LCIS题目链接:HDU - 3308 题意:标号1~n的数,两种操作:U a b:下标为a的数改为b;Q a b:查询区间[a, b]中的最长连续递增子序列;思路:对于区间[l, r] ;lmax表示以l为起点的最长连续递增子序列,rmax表示以r为终点的最长连续递增子序列,Max表示区间[l, r]中的最长连续递增子序列;对于两个相邻的区间,如果左区间的最后一个数小...原创 2018-08-13 10:51:34 · 280 阅读 · 0 评论 -
Panda HDU - 4046 (线段树, 单点更新)
Panda 题目链接:HDU - 4046 题意:给出一条只由'b', 'w'字符组成的字符串,两种操作:0 L R:查询区间[L, R]中有多少个子串是"wbw"组合;1 x ch:将x位置的字符改为ch;思路:一看这个题就是妥妥的线段树;但是首先怎么存区间[L, R]中"wbw"的个数呢?"wbw"是三个字符,把三个字符存到同一节点?显然不行,因为如果这样的话L...原创 2018-08-08 20:36:54 · 305 阅读 · 0 评论 -
YJJ's Salesman HDU - 6447(线段树 单点更新+DP思想)
YJJ's Salesman题目链接:HDU - 6447 题意:一个1e9*1e9的地图,要求由(0, 0) -> (1e9, 1e9);只能向下,向右, 向右下移动;地图中有n个点,有宝藏,只有从该点的左上方移动过来才能拿走宝藏,问最多能拿走多少宝藏;本题和之前做过的一个数星星题有点相似, 题目链接:POJ - 2352 根据题意可知在每一个点能拿到的宝藏一定是其左上...原创 2018-08-27 16:21:38 · 291 阅读 · 0 评论 -
Taotao Picks Apples HDU - 6406
K - Taotao Picks Apples题目链接:HDU - 6406 题意:树上有一排苹果,每个苹果又同的高度,taotao要摘苹果,而且必须从第一个苹果开始摘,然后没遇到一个高度比之前摘得苹果高的苹果就摘下来,问taota能摘多少苹果,第一个苹果必须摘;每次改变一个苹果高度,然后输出能摘到的苹果个数;每次都只在原来基础上改变苹果高度;思路:看似是个LIS,但是每个数是变化的,...原创 2018-08-28 14:20:47 · 241 阅读 · 0 评论 -
ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(线段树)
题目链接题意:n间房子,由1~n编号,每个房间里有若干旧灯泡,每个月能获得m个节能灯泡,从编号为1的房间开始换灯泡,如果手中的节能灯泡能将该房间内的所有旧灯泡都换掉就将旧灯泡全部换成节能灯泡,并且下一个月就不需要再换该房间了;如果手中的灯泡不够换全部的旧灯泡,就跳过这个房间,换下一个房间,知道手中无灯泡或经过了所有的房子,如果经过所有房子后手中还有灯泡,就留到下一个月用,即下个月初手中节能灯泡...原创 2018-09-01 20:50:15 · 177 阅读 · 0 评论 -
Snacks HDU - 5692 (线段树+dfs序)
Snacks HDU - 5692题目链接题意:n个点,n-1条边连接,使其形成一棵树;每个点有一个权值;m个询问: 0 x y:将x点的值改为y; 1 x :从0点出发,问经过x点的路径中能得到的最大全权值和是多少?思路:m个询问首先就想到线段树;但是此题并不是线性问题,而是树形问题,所以想用线段树就要先把树转换成线性问题;问0点出发经过x点得到的最大权值其实就是0到x的距离...原创 2018-09-14 16:10:41 · 288 阅读 · 0 评论 -
Stars POJ - 2352 (树状数组)
Stars 题目链接:POJ - 2352 题意:平面直角坐标系上有很多星号,把星号分为不同等级,等级是这样定义的:该星号左下方有n星号,则该星号等级为n星号坐标是按y有小到大,再按x由小到大顺序给出;树状数组存x位置上的点的个数,直接根据题目给出的坐标顺序插入横坐标即可,因为要找左下方的星号,那么一定先让左下方的点插入,而且我们是插入的横坐标,所以纵坐标要先按顺序由小到大插入,然...原创 2018-07-19 20:04:59 · 274 阅读 · 0 评论 -
Ultra-QuickSort POJ - 2299(树状数组求逆序数)
Ultra-QuickSort 题目链接:POJ - 2299题意:给出一个数列,通过不断交换相邻元素使得数列有序,问最少需要交换几次;实际上就是逆序对的个数;用树状数组求逆序对,此题需要先将数列离散化一下,因为原数列不是连续的,而且范围太大;倒序插入,每次求插入该数之前前边已经有几个比他小的数已经存在了; #include <iostream>#inclu...原创 2018-07-19 19:32:02 · 274 阅读 · 0 评论 -
Sum of Medians CodeForces - 85D(线段树+离散化)
Sum of Medians 题目链接:CodeForces - 85D 题意:对于...原创 2018-07-13 16:45:34 · 314 阅读 · 0 评论 -
Color the ball (线段树,区间更新模板题)
其实是很简单的一道题,由于一开始不会线段树的区间更新所以一直WA,网上题解大部分都是树状数组搞得,道不同啊,所以一直自己死扣,终于A了,真心不容易;好了,先说说线段树的区间更新,这是点更新的扩展,点更新很简单,当然你可以用个循环加点更新,不过,效率太慢,如果有上千条上万条操作肯定T了,所以伟大的码农们想到了一个方法,懒惰标记,简单来说就是更新的时候你用到那一层就更新到那一层,用不到的就标记下来原创 2017-08-09 15:11:43 · 303 阅读 · 0 评论 -
Just a Hook (线段树,区间更新)
hook有三种stick,分别为1号,2号, 3号,长度分别为1,2,3;T个测试样例, N个stick,Q个操作,每次操作改变x-y区间内stick的值,最后求和;话不多说,代码奉上:#include #include #include #include #define MAX 100000+5using namespace std;int arr[MAX];原创 2017-08-08 13:06:59 · 242 阅读 · 0 评论 -
hdu 1166 敌兵布阵(线段树)
刚学习了线段树,找个模板题练练手;先说什么是线段树:(以下定义来自百度百科) 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的原创 2017-08-07 16:26:45 · 255 阅读 · 0 评论 -
Can you answer these queries? (区间更新, 开根号)
Can you answer these queries?Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 19869 Accepted Submission(s): 4697Problem Description原创 2017-11-07 08:58:24 · 395 阅读 · 0 评论 -
I Hate It (线段树点更新)
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0学生ID编号分别从1编到N。 第二原创 2017-11-04 15:29:23 · 221 阅读 · 0 评论 -
Minimum Inversion Number HDU - 1394(线段树求逆序数)
Minimum Inversion Number 题目链接: HDU - 1394求逆序数的方法有多种, 一可以直接暴力求, O(n^2)的复杂度, 二可以用归并排序求, O(nlogn...原创 2018-04-30 20:41:50 · 195 阅读 · 0 评论 -
Buy Tickets POJ - 2828
Buy Tickets 题目链接: POJ - 2828 ...原创 2018-05-07 11:04:17 · 244 阅读 · 0 评论 -
A Simple Problem with Integers POJ - 3468(线段树,区间更新)
A Simple Problem with Integers 题目链接:POJ - 3468 ...原创 2018-07-16 10:47:23 · 180 阅读 · 0 评论 -
Mayor's posters POJ - 2528(线段树)
Mayor's posters题目链接:POJ - 2528 题意:在一个长度为10000000的墙上贴海报,共10000个,后贴的海报会覆盖之前的海报,给出海报的张贴范围及顺序,问最后还能看到几张海报;x范围太大,需要离散化,然后倒序插入;#include <stdio.h>#include <algorithm>#include <strin...原创 2018-07-17 08:57:26 · 386 阅读 · 0 评论 -
Fast Arrangement HDU - 3577(线段树, 区间更新)
Fast Arrangement题目链接:HDU - 3577 题意:一辆车可坐k名乘客,一个人可以买区间[a, b]的车票,如果在区间[a,b] 车上人数等于k,就不能买票了;注意:区间[a,b]的票时a站上车,b站下车,相当于在[a, b-1]区间坐车;#include <bits/stdc++.h>using namespace std;const int ...原创 2018-07-17 13:30:02 · 255 阅读 · 0 评论 -
Who Gets the Most Candies? POJ - 2886(线段树)
Who Gets the Most Candies? 题目链接:POJ - 2886 题意:一群小孩围坐成一圈,按顺时针方向编号为1~N;每个孩子手里拿着一张纸片,上边有一个非零整数x;从第k个孩子开始淘汰,当某一孩子淘汰后,下一个淘汰的和...原创 2018-07-11 17:01:08 · 390 阅读 · 0 评论 -
Atlantis HDU - 1542(线段树,扫描线)
Atlantis题目链接:HDU - 1542 题意:求n个矩形合成图形的面积,如下图是由三个矩形构成,求出所涂颜色区域的面积;当图形很少时可以暴力求解,S=S红+S紫+S蓝;但是这样是很麻烦的,怎样让他简单化呢?观察一下上图的墨绿线,这些线很好的将原图划分为五部分,面积就是这五部分和,这就是扫描线;我们可以把墨绿线看作是由左向右移动的,当他碰到一条边的时候暂停一下,那么第...原创 2018-07-17 18:36:55 · 283 阅读 · 0 评论 -
Picture HDU - 1828(线段树,扫描线)
Picture题目链接:HDU - 1828 题意:有多个矩形重叠在一起,求出重叠后的图形的周长,如下图,阴影部分是若干矩形重叠后的部分,彩色线条是重叠后图形的边框,即周长,左侧是矩形的坐标:当我们用扫描线由下向上扫的时候每次变化的长度之后就是上下底线的长度之后,然后就剩下竖线的长度和了;竖线的长度和是扫描线移动长度*竖线条数;移动长度就是上下两根线间隔,关键是求条数;我们...原创 2018-07-18 08:57:54 · 495 阅读 · 0 评论 -
覆盖的面积 HDU - 1255(线段树,扫描线)
覆盖的面积题目链接:HDU - 1255 题意:若干矩形重叠在一起,求出重叠部分的面积之和,如下图,求出红色区域面积;之前算过整个图形的面积,而今要算重叠部分的面积,还是原来的思路,接着动用那条墨绿的扫描线;和之前有些许不同的是扫描线要扫过两次才能出现重叠区域,那么如何用线段树维护区间[l, r]被覆盖次数大于1的长度呢?先回想一下用线段树维护区间[l, r]被覆盖的长度的...原创 2018-07-18 11:13:24 · 354 阅读 · 0 评论 -
Points CodeForces - 19D(线段树)
Points 题目链接:CodeForces - 19D 题意:有一直角坐标系;三个操作:一:add x y;标记(x, y)点;二:remove x y;消除已经标记过的点(x, y)三:find x y;在点(x, y)的右上方找到横坐标...原创 2018-07-13 14:50:40 · 472 阅读 · 0 评论 -
Frequent values POJ - 3368(线段树,区间合并)
Frequent values POJ - 3368题目链接题意:一个非递减序列,随机询问区间[l, r]中出现次数最多的数的出现次数; 思路:多次询问,首先就要想一下线段树;由题意可知数列中的数是连续的,既然是连续的就有合并的希望!!!那么就来一发线段树吧(RMQ也可以做,但是不会啊!!!还是蒟蒻); 首先,要用线段树维护哪些值? 题目要求区间内出现次数最多的数的出现...原创 2018-09-15 10:05:14 · 301 阅读 · 0 评论