线段树 && 树状数组
文章平均质量分 76
Julyana_Lin
这个作者很懒,什么都没留下…
展开
-
hdu - 4419 - Colourful Rectangle - 线段树
求http://acm.hdu.edu.cn/showproblem.php?pid=4419求不同颜色的覆盖面积。#include#include#includeusing namespace std;typedef __int64 lld;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int max原创 2012-10-29 11:09:19 · 529 阅读 · 0 评论 -
hdu 3308 线段树区间 LCIS
题意: 求一个序列相应期间的最长上升子串。期间会有修改和询问。解: 线段树当前区间最长前缀,后缀,最长子区间,开始数字,结束数字。 单点更新,区间操作。做题过程: query还是觉得有些困难的。但是还是自己写出来了(有那么一点点小小的错误,就是包含m的时候,同时仍然需要考虑单单是左边的和单单是右边的)。看这题应该好好看看写的query。原创 2012-09-18 10:43:15 · 511 阅读 · 0 评论 -
poj 1436 线段树区间操作 Horizontally Visible Segments
给出 n 条垂线,问有多少个三元组 中,任意两条可以看得到对方样例中 答案为 1 ,横坐标 为 1 的线段+横坐标 为 2 (3,4)的线段+横坐标为 1 的线段 做过 poj 2777 区间染色的问题 就 很容易看出这个 题目 其实就 是 该问题 的小 延伸,我们可以根据x坐标进行从小到大的排序,然后对每条线段query该线段左端,改线段统领的区间内 有多少种color,vis[][原创 2012-09-17 11:35:11 · 470 阅读 · 0 评论 -
poj 3667 线段树前后缀区间 Hotel
【题意】一共有n个空位,初始全为空,会有两种操作,一种是询问是否有r个连续的空位,若有,则将最左端有r个连续的空位的地方全部填满,若没有则不填,另一种是将从u开始的d个位置全部清空【输入】第一行两个数n、m(接下来m行每行表示一次操作,若该行第一个数字为1,接下来是一个数字,表示操作一若该行第一个数字为2,接下来是两个数字,表示操作二【输出】原创 2012-09-17 17:17:22 · 562 阅读 · 0 评论 -
poj 2528 线段树 lazy Mayor's poster
决定将这个再写一遍,这是以前的代码。/*Pro: poj-2528Sol:date:2012/07/03*/#include#include #include #include//这个define还不能用加的,这么低级啊。。。#define N 10010using namespace std;int Case,n,dis[10000100],s[N],原创 2012-08-28 16:32:28 · 861 阅读 · 0 评论 -
cf 219E parking lot 线段树
空的标为1。两个操作。将车停在离左右两边最近车最远的地方。如果有两个位置,输出编号小的位置。编号为id的车离开停车场。做题过程: 杂么什么都说跟那个hotel有点像。。。Orz。。。。 这个很有特色的就是push_up和查询了。#include #include #include #define lson l, m , rt << 1#de原创 2012-09-25 10:25:06 · 522 阅读 · 0 评论 -
poj 3468 很水的线段树lazy操作,为了理解hdu 3954 的 lazy做的。
操作: 对一个区间的每个数加上一个数。询问: 一个区间的和为多少。 这让我想起那道操作是对一个区间的每个数根号,求的也是和。lazy得不同而已。做了几题lazy的题,发觉和别的结合起来的时候我又不懂了。于是重新开始做lazy的基础题。现在又对lazy有了更深的了解。 我发觉我每次写的lazy都是自动写成了在本个区间就释放的lazy,但是没有原创 2012-08-25 21:50:10 · 607 阅读 · 0 评论 -
hdu 3954 线段树 Level up 很有特色的一个题(关于lazy操作)
这题是个线段树。 题意:成段更新,成段询问,但是更新却和一般的线段树不大一样,每个点虽然接收到相同的信息,但是由于本身不同,最终得到的值也是不同的.用一般的延迟操作就搞不定了,我觉得这是这个题目最大的特色所在,做完之后的感觉很有趣。解: TLE解法:用level表示子区间的level和,用Exp表示子区间最大Exp。区间更新的时候,如果这个子区间都达到了max_l原创 2012-08-21 10:55:27 · 779 阅读 · 0 评论 -
hdu 4262 Juggler 这题真是跟小丑一般。。。
题意: 有个球的圈圈。三种操作:逆时针转一个,顺时针转一个,丢掉手中的那个的同时顺时针的球到你的手里。每个操作都花费一秒。告诉你要求的出圈顺序,求最小花费时间。注:开始在手中的球为1.解: 线段树和树状数组都可。树状数组很蛋疼。建议我以后用线段树。开始为什么不用线段树是因为怕自己搞不出相对坐标和绝对坐标。凡是二分的树状数组能不写就不写。这个是用set代替二分的原创 2012-08-26 11:09:04 · 654 阅读 · 0 评论 -
hdu 4391 线段树
好神啊。解题报告说是哈希,我记得有个人跟我说过分块可以做线段树不能做的,只是复杂度高一点而已。。。。我用线段树过的。。。。。。刚开始把rt > 1了,调了一会。。。。。。,后来又T了,于是就开了一个mx和mn记录一个区间中颜色最大的。如果要查询的颜色不在这个区间里面,我们就直接不查了。/*Pro: 0Sol:date:*/#include #include #include原创 2012-08-23 17:03:21 · 1490 阅读 · 16 评论 -
zoj 3363 线段树维护最大值 Alice's present
Alice's present题意: 给你一个n个数字组成的串,同时有m个询问,问第a个数字和第b个数字之间是否存在相同的数,没有就输出"OK",存在就输出最右边最早出现的重复的数。解: 对于每个记录之前的出现位置,若没出现,就为0; 对于每个询问区间找个最大值。解题过程: Orz,刚开始把题意看错了。。。以为是第一次出现原创 2012-09-19 15:44:40 · 1184 阅读 · 0 评论 -
BNU- 12873 - Generations 线段树
在久别线段树之后,我终于又A了一道线段树。题意为:一个母龙不停地生小孩。问对于每个龙来说,他存在过的最小子孙和他的代数差值是多少。这题就是区间修改,区间求最值。调了几调,还在课上写了一写。终于过了。push_up 和 push_dn写错了。其他全是图方便的写法, 比如unique 和 lowerbound。#define maxn 141001#define l原创 2012-10-10 17:06:44 · 533 阅读 · 0 评论 -
poj 3225 线段树区间更新,区间询问 Help with Intervals
poj 3225 线段树区间更新,区间询问 Help with Intervals题意: 给定一些集合的操作,问最后的集合是多少? 开始集合为空。解: 现在看跟以前看不一样。学会了对除更新区间之外的区间操作。我们一个一个操作来分析:(用0和1表示是否包含区间,-1表示该区间内既有包含又有不包含)U:把区间[l,r]覆盖成1I:把[-∞,l)(r,∞]覆盖原创 2012-09-19 16:20:54 · 499 阅读 · 0 评论 -
BNU - Choosing a camera - 数据结构 (线段树、队列)
线段树存的是更新到当前所有的相机,队列则不管3721都把出现的camera塞进去。 最后,在询问那里判断。 一个一个出队,询问这个相机是否有用。队列是用了优先队列。题意是:相机有两个参数和价格。一个参数大于,一个参数大于等于剩下的所有相机,这个相机才不过时。我们需要在不过时的相机里面挑选价格最便宜的。 价格相等的时候挑选最早出现的。#include #includ原创 2012-10-26 09:33:52 · 514 阅读 · 0 评论 -
hdu - 4348 - To the moon - 线段树+历史询问
据说,关于历史的询问,可以用主席树来做,好像是个函数型的线段树。不懂,等我先把普通线段树历史查询的离线操作搞明白。意思现在算是理解了。 可持续化树状数组:http://www.cnblogs.com/staginner/archive/2012/09/08/2676356.htmlhttp://blog.csdn.net/cyberzhg/article/details/784原创 2012-08-09 11:04:11 · 1394 阅读 · 0 评论 -
hdu - 4325- Flowers - 区间更新,单点查询
题意:http://acm.hdu.edu.cn/showproblem.php?pid=4325 插入好多条线段,问在某一时刻点有多少条重叠的线段。解: 区间更新,单点查询。做题过程: 好多天前做的,但是一直T。就放下了。现在看了一看,很明显是对的啊,而且没有犯忘记递归到底层返回的毛病,肿么会T呢? 一看最后的输出,我当时就原创 2012-08-14 20:58:18 · 443 阅读 · 0 评论 -
hdu - 4339 - Query - 树状数组||线段树
用树状数组和二分寻找连续的1.http://acm.hdu.edu.cn/showproblem.php?pid=4339做题过程: 开始做的时候发现自己以前做过。索性做吧。神奇的是我发现我以前用树状数组和线段是各A了一遍。真是勤奋的孩子。 我对这题的二分很是反感,记得以前做的时候就二分了很久来着,而且只是二分不会。。。。。。 对于线段树的原创 2012-08-20 22:41:19 · 535 阅读 · 0 评论 -
hdu 4288 线段树 Sum of Medians 像lazysales girl Coder
题意: 就是不停地插数,让数按从小到大排。求第3,8,13...个数的和。解: 线段树。线段树的坐标表示在所有给出的数当中第i‘大的数(0就是还没有,>0就是第i大的数已经插入了)。然后ans[][i]表示当前区间(以第i (i为下标)个数% 5 )相加的和(可能表述有点不清楚哈。。)意会,意会。 最后是O(1)查询。做题过程: 终于有一道网赛有思路的题了原创 2012-09-16 20:21:10 · 502 阅读 · 0 评论 -
hdu 1540 Tunnel Warfare
iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值> key的第一个元素。用stl和线段树都写了一遍。难的地方在于寻找pos所在位置的连续块的长度。/*Pro: 0Sol:da原创 2012-09-24 19:30:13 · 360 阅读 · 0 评论 -
hdu 2871 vector + 线段树 Memory Control
题意:现在有1到N(N 1. Reset 释放所有内存块,并且输出“Reset Now”。2. New x 找到一块有连续x块内存的空间,并且占据它。如果有多种,选择起始数字最小的,然后“New at A”,A表示起始数字;否则输出“Reject New”。3. Free x 释放一块占据x单元的内存块,并且输出“Free from A to B”,A到B表示占据的内存块;原创 2012-09-20 14:51:46 · 541 阅读 · 0 评论 -
hdu - 4302 - Holedox Eating - 线段树
线段树。http://acm.hdu.edu.cn/showproblem.php?pid=4302求距离离某点距离最短的点的下标。刚开始初始化的时候没初始对, Orz了好久。还以为有什么问题呢。#include #include #define inf 100010#define maxn 100010#define ls rt << 1#define rs rt <<原创 2012-10-11 12:53:05 · 717 阅读 · 0 评论 -
hdu 3397 线段树前后缀blahblah Sequence operation
题意:给出一个长度为N(N 插入操作:0 a b 将所有[a, b]区间内的数改成01 a b 将所有[a, b]区间内的数改成12 a b 将所有[a, b]区间内的数异或一下(0边1,1变0)输出操作:3 a b 输出[a, b]区间内1的数量4 a b 输出[a, b]区间内最长的连续1串解: 正解应该比较简单。然而我的解就有点Orz了。 每原创 2012-09-18 12:09:55 · 1654 阅读 · 0 评论 -
poj 3067 树状数组 Japan
题意:http://poj.org/problem?id=3067 两排点,问有多少个焦点。做题过程: 乍看以为是图论呢,韦广说是树状数组。于是我就开始自己想,自己写。左边那一列点从下往上插(线统计与之相连的那个点之前有的和,再插),与同一点相连的先插下面大的那一点(这样才不会被另外一个点统计)。 哎,刚开始以为在一个位置插了就不能再插了呢,还原创 2012-08-24 16:59:17 · 549 阅读 · 0 评论 -
poj 2985 并查集+线段树 线段树求第k大数 The k-th Largest Group
题意: 有一群猫,现在给它们编号,然后组队,0 1 2 代表 1 号和 2 号的队伍合并。 1 4 询问第 4 大的队伍 Size 是多大。解:(贴的,他写的好。表示学习) 线段树。建立一个线段树。每段记录group的大小在l与r之前的数目。初始时大小为1的组有N个,大小不为1的组均为0个。所以对于每段,若左边界为1,则其数据域为N,否则为0。以后不断合并grou原创 2012-08-26 16:48:16 · 2576 阅读 · 0 评论 -
poj 1436 线段树 Horizontally Visible Segments
题目: 给出一些垂直的线段,两两可见的三条线段有多少组。 可见是说找出一条水平线段连接两条线段,而且这条线段不和别的线段相交。解: 扫描线,我觉得。原创 2012-08-26 15:08:25 · 559 阅读 · 0 评论 -
poj 2886 线段树
跟poj2828的感觉很类似,就是加了很多附加的东西,诸如map或者是反素数,再譬如,这是个环而不是一行东西。http://blog.csdn.net/julyana_lin/article/details/7880173题意:http://poj.org/problem?id=2886 约瑟夫问题。第i个出去的孩子得到f(i),f(i)表示i的因数个数。从第k个孩子开原创 2012-08-18 19:24:43 · 538 阅读 · 0 评论 -
hdu 4358树状数组
题解:数据结构题,利用离线加树状数组统计答案 我们考虑这个问题的弱化版:给你N个数,求一个区间内不同的数字有多少个,这个问题可以通过记录每个权值上次出现的位置,在O(N lgN)的时间内得到解决,具体的做法是将查询按右端点排序,从左向右枚举i,维护一个树状数组,其第k位表示k到i不同的数字有多少个,我们考虑将第i个数字加入,这时候,会树状数组中发生改变的仅仅是原创 2012-08-16 11:03:00 · 2526 阅读 · 1 评论 -
hdu 4366 单点更新,区间查询最值
比赛的时候一看就是棵树,我还以为是个树dp呢,再看做出来的人那么少,就更是没上心。没想到这是棵线段树!!!题意:http://acm.hdu.edu.cn/showproblem.php?pid=4366 给你一棵树,每个结点有两个属性值,1:能力值 2:忠诚度 然后m个询问,每次询问一个整数u,求u的子树中能力值大于u的且忠诚度最大的点的编号原创 2012-08-14 20:17:21 · 2056 阅读 · 0 评论 -
BNU Watermelon Full of Water-单点更新,区间询问
题意: 有n个点,每个点都有一个点权,每个点都有一条向右到达n点中一点的不等长线段。总价值这样计算: 若取这条线段,就将该线段的最左端点的权值放入总花费中。求: 能覆盖n个点的最小花费。解: 1.线段树+dp 对于线段上的每一个点,都从左向右一一处理。对于点x,取所有能到达他的线段当中原创 2012-08-13 17:16:11 · 402 阅读 · 0 评论 -
hdu 4351 区间合并 树根
今天T了一题,WA了一题,肿么办呢?下面是WA的那题,按照题解写的。12/08/13过了几天,我知道了要用一个东西去记录树由于中间m分开的两个子区间的前缀、后缀、和,并且注意了0的数字根是0的情况,又改了一改。T了。/*Pro: 0Sol:date:*/#include #include #include using namespace std;原创 2012-08-10 21:22:55 · 569 阅读 · 0 评论 -
矩形面积交-线段树
hdu - 1255世事总是如此地无常,很多事情总在意料之外。比如,这题。不知道是如何错的,是因为二分写得不好?做完矩形周长并之后,就把这个代码加了两个0,就过了。又是maxn开小了。下面是正确代码。建议: 学矩形周长并、面积交,先学矩形面积并。Pro: 0Sol:date:*/#include#include #include#i原创 2012-08-06 22:29:06 · 1478 阅读 · 0 评论 -
Lazy Salesgirl-线段树优化
参考http://www.cnblogs.com/wuyiqi/archive/2012/04/28/2474672.html的,加上自己的一些理解。话说上面这个人,我一看到他的线段树就觉得亲切,因为跟我的写法是一样的。再仔细一看他的博客,发觉我的kmp是跟着他做的。再看一眼,发觉他跟我的方向一样,都是线段树。真是相见恨晚啊!这题应该仔细理解排序那里(相当于离散化)和三棵线段树那里原创 2012-08-06 11:22:42 · 1081 阅读 · 0 评论 -
多个矩形边缘周长
世事还是如此无常,关键是要有平常心!http://www.cnblogs.com/Booble/archive/2010/10/10/1847163.html详细耐心的解说,包您一看就懂,假一罚十!以下是poj1177求多个矩形边缘周长的代码以及注释: 吐槽:WA了很久很久,原因是因为什么呢? maxn定义得太小了。 人家的原创 2012-08-08 19:56:51 · 700 阅读 · 2 评论 -
hdu 3874 树状数组+离散化
囧。是hdu4358的弱化版。http://blog.csdn.net/julyana_lin/article/details/7872393跟hdu3333一个德行。离线处理。按右端点排序处理。离散化是为了标记它上次出现的位置。不得不记录一下。1A,并且只花了十几分钟。原创 2012-08-18 22:25:38 · 349 阅读 · 0 评论 -
hdu 4027 线段树+根号
题意:一列数,两种操作。1: 0 a b, 将a b中每个数都取根号(保留整数)2:1 a b, 询问a b区间的和。解题关键: 典型线段树。但是每次修改我们不能都递归到底,所以需要处理取根号的问题。 此题的关键是要理解对任何64位以内的值,开根号最多不会超过7次,也就是说最后都变为了1. 如果一个区间里都为1的话,那我们是不是原创 2012-08-20 19:15:30 · 677 阅读 · 0 评论 -
hdu 4046 树状数组
用树状数组统计wbw。如果出现,我们在后面那个w的位置插上1.统计[x,y]的区间的话,从x+2统计到y。/*Pro: 0Sol:date:*/#include #include #include #include #include #include #include #include #define maxn 50009using namespace st原创 2012-08-20 10:45:47 · 457 阅读 · 0 评论 -
hdu 4031 树状数组 好题
题意: 一排墙,如果它处于准备状态被攻击了,那么他就被成功攻击。即,若在k时间遭受攻击,则它在k + 1 ~ k + t - 1的时间里面都在准备状态,这时候攻击就是成功攻击。 告诉你怎么攻击的,询问一个点被成功攻击了几次。解: 据说这题在比赛的时候三小时多只有一个人出。令我很费解的是,时间怎么和空间联系起来呢? 听韦广讲述了一遍原创 2012-08-22 18:47:22 · 534 阅读 · 0 评论 -
hdu 3974 线段树
线段树,区间更新,单点询问。一个序列。更新:T a b , 将a所对应的区间的值都改成b询问:C a,问a的值是多少?做题过程: 哎,又开始漫漫找错路。。。 原来这题是要自己找根的。原来写的lazy操作是对的,wa了之后我就将lazy那个数组直接删了,当时我想val它自己就相当于一个lazy操作,结果样例肿么都过不了。不得已,手写样例。发觉是需要原创 2012-08-22 15:20:37 · 510 阅读 · 0 评论 -
hdu 3911-区间合并、更新和查询Black And White (&& hdu 1199)
http://acm.hdu.edu.cn/showproblem.php?pid=3911一个序列要么是1,要么是0.操作: 修改:修改区间[a,b],使0变成1,1变成0; 询问:区间[a,b]最长的连续1有多长?解: 线段树。节点信息:preb,sufb,prew,sufw,mxb,mxw;分别表示最长1前缀,最长原创 2012-08-19 10:35:59 · 8721 阅读 · 0 评论 -
lightOJ 1135 lazy 操作
有n个数,刚开始都为0 http://www.cnblogs.com/wuyiqi/archive/2012/05/27/2520642.htmladd i , j 给i,j区间内的数都加1Q i j 询问i、j间能被三整除的数的个数http://lightoj.com/volume_showproblem.php?problem=1135线段树记录三个域对三取余为0的数的个数原创 2012-08-31 17:05:53 · 458 阅读 · 0 评论