线段树/平衡树
文章平均质量分 85
岩之痕
已停止更新
展开
-
POJ 2777 Count Color 线段树
线段树。原创 2014-08-28 23:28:00 · 1104 阅读 · 0 评论 -
POJ 2482 Stars in Your Window (线段树扫描线)
用SBT离散化的线段树扫描线原创 2015-08-14 17:08:43 · 1319 阅读 · 0 评论 -
Codeforces 19D. Points ( 非递归线段树套SBT + 离散化 )
题意:给定最多20万个操作,共3种:1.add x y :加入(x,y)这个点2.remove x y :删除(x,y)这个点3.find x y :找到在(x,y)这点右上方的x最小的点,若x相同找y最小的点,输出这点坐标,若没有,则输出-1.首先将x值离散化,然后对每个x值维护一个平衡树来存对应的y值,我写的SBT,其实用set也是原创 2015-09-01 10:04:36 · 1338 阅读 · 0 评论 -
Codeforces 612 D. The Union of k-Segments (非递归线段树+离散化)
题意:给定一堆线段,求最后重叠了k次或以上的线段和点。先操作,最后一次下推标记,所以尽管是区间修改,非递归写起来还是很简单。维护两个线段树,一个维护线段的覆盖,一个维护点的覆盖。对于线段[L,R],点修改的区间是[L,R],区间修改中,用线段的左端点代表这条线段,所以区间修改的区间是[L,R-1]在所有操作都结束之后下推标记,然后从左到右扫描线段输出答案即可。输出答原创 2015-12-28 23:13:56 · 2126 阅读 · 0 评论 -
Codeforces 45C. Dancing Lessons (SBT)
题意:n个人站成一行,从左到右编号1到n,每人一个技巧值。若相邻的两个人性别不同,则这两人有可能一起跳舞。每次操作,从所有可能一起跳舞的两人中,选出技巧最接近的两人,若有多种方案,则选择最靠左边的(编号最小的)。然后其余的人合并在一起,不留空(编号不变)。继续操作,直到最后结束,问所有的出来跳舞的人的编号以及顺序。首先,用 next 数组表示每个人的右边的第一个人的编号,-1表原创 2015-09-06 20:37:14 · 812 阅读 · 0 评论 -
Codeforces 35E. Parade (非递归线段树 离散化)
题意:给定若干矩形,下端挨着地面,求最后的轮廓形成的折线,要求输出每一点的坐标。先将横坐标离散化,然后用线段树维护最大值,支持区间修改。在所有操作结束后,下推所有标记,然后从左到右扫描一遍高度,在高度有变化的时候输出点的坐标。更新最大值比较快的写法是用非递归线段树,在更新过程中不需要下推标记,最后一次下推所有标记。代码如下:#include #include原创 2015-09-06 19:02:07 · 1533 阅读 · 0 评论 -
URAL 1019. Line Painting (线段树)
方法一:用链表存区间,每次上色的操作,依次取出所有的区间,用上色的区间去覆盖,返回新的区间。由于每次都要遍历一遍所有的区间,比方法二慢。方法二:离散化的线段树先把所有区间的端点列出来,排序。然后用线段树来做,最后将连续的白色区间合并,再计算答案。代码写的比较乱。方法一代码:#define FOR(i,n) for(long long (i)=原创 2014-08-28 20:00:07 · 1251 阅读 · 0 评论 -
Codeforces 12D.Ball (非递归线段树+离散化)
题意:给N (N对于某点(x,y,z),若存在一点(x1,y1,z1)使得x1 > x && y1 > y && z1 > z 则点(x,y,z)是特殊点。问N个点中,有多少个特殊点。思路:大概就是,先记下所有点,从大到小排序,先按z的降序,再按y的降序,再按x的降序排序。将x离散化,然后,按z分层,一层一层扫描。Z表示当前层的z值。线段树中,存的是所有 z原创 2015-09-03 08:31:10 · 1600 阅读 · 0 评论 -
HDU 3642 Get The Treasury (线段树扫描线进阶--求长方体重叠3次或以上的体积)
线段树扫描线进阶--求长方体重叠3次或以上的体积原创 2015-08-18 23:44:49 · 1349 阅读 · 0 评论 -
Codeforces 605D. Board Game (BFS+线段树套SBT+离散化)
题意: 给定十万个卡片,卡片上写着起点(a,b) 终点(c,d)当前坐标(x,y), 开始时是(0,0)如果 x >= a 且 y >= b 则,下一步可以选择使用这个卡片,使用过后,当前坐标变成(c,d) 给定卡片信息之后,问最少使用多少张卡,可以使用最后一张卡。本质上就是一个BFS(广度优先搜索),因为最优序列中,每张卡最多被使用一次不过,这个BFS在原创 2015-12-21 13:05:17 · 1584 阅读 · 0 评论 -
Codeforces 633H. Fibonacci-ish II (Mo's Algorithm(莫队算法) + 线段树 + 离散化)
题意: 给定一个长度最大为3万的序列,和最多3万个询问,每个询问问某区间[L,R]里的数,去掉重复然后排序之后,依次乘上斐波那契数列然后求和,结果对m取余的值。区间优化用Mo's Algorithm(莫队算法),莫队算法的Add和Remove中使用线段树,所以整体复杂度是O(n*sqrt(n)*log2(n)).这题一路TLE,从TLE26到TLE27到TLE29到TLE35都快绝原创 2016-03-10 23:55:40 · 2860 阅读 · 1 评论 -
对树状数组的一点理解
树状数组 By 岩之痕一、概述树状数组是一种 用数组进行存储的 自下而上进行操作的 多叉树。以下叙述中,A为原数组,C为树状数组所用的数组,B为特殊情况需要用到的辅助数组。最基本的应用就是维护一个支持两种操作的数列:1.让A[i]加上某数X 2.求一个区间A[L] + A[L+1] + ... + A[R] 的和。树状...原创 2015-04-13 17:01:05 · 3603 阅读 · 5 评论 -
线段树详解 (原理,实现与应用)
线段树详解By 岩之痕一:综述线段树是一种可以快速进行区间修改和区间查询的数据结构。点修改,区间修改和区间查询的复杂度都是O(log2(n))并且,线段树可以维护很多种类的信息。说到线段树就不得不提一下树状数组,树状数组维护的信息必须满足区间减法,因为树状数组只是维护1到X的信息,通过相减来得到区间信息,代码简单而且速度快,占用空间又少于线段树,所以一般情况下可以用树状数组的地方就原创 2015-09-09 01:58:46 · 141324 阅读 · 81 评论 -
线段树从零开始
从零开始讲线段树,适合有一定C/C++编程基础,想学习线段树的读者。原创 2016-08-22 22:26:41 · 55932 阅读 · 82 评论 -
Codeforces 739C.Alyona and towers (线段树/非递归线段树)
题目链接:http://codeforces.com/contest/739/problem/C题意:给定30万个正整数,和30万个操作,每次操作后输出查询结果。操作:每次把从L到R的数都加上D查询:最宽的Hill的宽度。定义:先递增后递减的连续n个数称作宽度为n的Hill。原创 2016-12-07 12:24:38 · 1885 阅读 · 0 评论 -
WOJ 1618 - Magic Array (线段树+单调栈)
题意:给定n(n<=500000)个数,A[1],A[2],...,A[n]。求所有子区间的 (最大值*最小值*长度)之和原创 2016-04-20 10:33:21 · 1152 阅读 · 0 评论 -
Codeforces 650D. Zip-line (动态LIS) (可持久化线段树 或 离线+树状数组)
题意: 给定一个长度为n的数列,和m个询问,每个询问的格式是:将原数组的第a个数改成b之后,数组的最长上升子序列(LIS)的长度。做法:可持久化线段树令 h[ ] 为原数组,LIS_L[ i ] 表示以 i 结尾的LIS长度,LIS_R[ i ] 表示以 i 开头的LIS长度。这俩数组用普通LIS算法O(nlog2(n))求出。然后来分析一下询问怎么处理:在 h[a原创 2016-03-11 17:38:45 · 3329 阅读 · 0 评论 -
Codeforces 633 G. Yash And Trees (dfs序+线段树+位图)
一道化树为链+线段树+位图的题目。原创 2016-03-07 22:52:40 · 1045 阅读 · 0 评论 -
Codeforces 633E. Startup Funding (概率+非递归线段树/Sparse Table +二分)
题意: 题目有一点点复杂。 有n(1 现在,对于每个L值,都有一个可以最大化p(L,R)值的R,假设当左端点为L时,最大的p(L,R)的值为Q[L]。题目问,在这些L值中,随机选择k个作为L值,对于每个L值计算可能达到的最大p(L,R),然后求平均数,问这个结果的数学期望是多少。简略思路:第一步:求出上面定义的Q[L]数组第二步:将Q数组进行排序,从小到大排序。第原创 2016-03-08 11:56:58 · 1331 阅读 · 0 评论 -
HDU 1255 覆盖的面积 (线段树扫描线)
线段树扫描线求矩形区域重叠两次以上的面积原创 2015-08-18 23:23:24 · 1870 阅读 · 0 评论 -
POJ 1177 Picture (线段树扫描线)
线段树扫描线求矩形重合部分周长原创 2015-08-15 20:50:35 · 2534 阅读 · 3 评论 -
HDU 2795 BillBoard 线段树
题意:有一个原创 2014-10-28 12:10:57 · 975 阅读 · 0 评论 -
HDU 4288 Coder 离散化+线段树
题意:原创 2014-10-28 12:21:57 · 1109 阅读 · 0 评论 -
CodeForces 482 B. Interesting Array
题意就是,给定n,求一个数组原创 2014-10-25 07:40:19 · 1105 阅读 · 0 评论 -
CodeForces 474 E. Pillars
题意就是,给定10^5 个数(范围10^15),原创 2014-10-22 21:42:29 · 1091 阅读 · 0 评论 -
URAL 1855. Trade Guilds of Erathia
题意:很多原创 2014-09-01 20:06:25 · 659 阅读 · 0 评论 -
POJ 3264 Balanced Lineup 线段树
线段树原创 2014-08-28 16:34:42 · 455 阅读 · 0 评论 -
URAL 1846. GCD 2010
总共10万个操作,又是加入,又是删除的,原创 2014-08-30 08:54:23 · 1499 阅读 · 1 评论 -
URAL 1989. Subpalindromes
给定一个字符串,有两个操作。1:改变某个字符。 2:判断某个区间原创 2014-08-29 10:56:43 · 4539 阅读 · 7 评论 -
CodeForces 374 D. Inna and Sequence
题意:原创 2014-10-27 21:45:25 · 1169 阅读 · 0 评论 -
CodeForces 514D.R2D2 and Droid Army (线段树+双指针)
CodeForces 514D: 一道线段树+双指针的题目原创 2015-02-26 21:11:37 · 1000 阅读 · 0 评论 -
Codeforces 542A. Place Your Ad Here (扫描线进阶 带权值的线段交求最大值) (线段树)
题目:给n个线段:[ L , R] 给m个线段:[ A , B ] 权值为C(1要求:在两组线段中各选一个,使得两个线段的相交部分[ X,Y] 满足 (Y-X)*C 的值最大,求这个最大值以及选择的是哪一对线段。一类线段带权值,一类不带权值,所以,对于每个带权值的线段,找出跟它相交长度最大的线段,遍历就行了。直接做是O(mn)会超时,所以需要用到扫描线,这个原创 2015-08-31 21:11:13 · 2511 阅读 · 0 评论 -
Codeforces 558E. A Simple Task (线段树+计数排序)
线段树+计数排序原创 2015-08-28 11:00:29 · 3085 阅读 · 1 评论 -
CodeForces 547B. Mike and Feet 线段树
题意:给定一个长度为n的数组aa中一个连续区间的strength是区间内的最小值,对x=1,2,...,n分别求长度为x的连续区间中,strength的最大值是多少思路:对于每个a[i]找出在a[i]左边,离a[i]最近且比a[i]小的数的下标,记为VL[i],若不存在则VL[i]=0;找出在a[i]右边,离a[i]最近且比a[i]小的数的下标,记为VR[i],若不存在原创 2015-05-28 21:33:33 · 970 阅读 · 0 评论 -
树状数组实现矩阵中矩形区域的修改以及求和
讲讲树状数组如何实现对一个矩阵的矩形区域的加法和求和。原创 2015-04-15 18:45:26 · 2127 阅读 · 0 评论 -
CODEVS 3243 区间翻转 (SBT)
SBT实现区间翻转原创 2015-04-08 20:03:54 · 1333 阅读 · 0 评论 -
非递归线段树区间修改区间求和的两种实现(以POJ 3468为例)
非递归线段树实现区间修改区间求和的两种方法(以 POJ 3468 为例)原创 2015-04-07 08:37:59 · 2668 阅读 · 0 评论 -
ZOJ 2112 Dynamic Rankings (动态区间第K大) (线段树套SBT+二分)
线段树套SBT+二分 解决 带修改的区间第k大问题原创 2015-04-11 20:18:43 · 1678 阅读 · 0 评论 -
HDU 2665 Kth number(区间第K大) (离散化+主席树)
HDU 2665 主席树求区间第K大原创 2015-04-10 16:49:33 · 1683 阅读 · 0 评论 -
CodeForces 527C. Glass Carving (SBT/线段树/std::set)
题目:求矩形被多次切割后的最大矩形面积。给出SBT解法和线段树解法以及std::set解法。原创 2015-03-30 22:46:13 · 3544 阅读 · 2 评论