
线段树
风中之神111
我亦飘零久
展开
-
Hdu2795_Billboard(单点更新+区间最值)
题意:给一个hw的格子,然后给出多个1w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1;思路:初始化将每一排的格子数目w放到每一个叶子节点上。每输入一个板子宽度wi,查询>wi的最小的下标(二分),并用线段树更新该点的剩余宽度。这样写O(nlognlogn)#include <cstdio>#include <cstring>...原创 2019-08-08 08:08:55 · 180 阅读 · 0 评论 -
POJ2104_K-th number
题意:给n个数,m次询问s,t,k,每次问[s, t]区间的第k大数思路:暴力:排一次序,然后对于每次的询问[s, t],从头开始找那些在[s, t]的数(需要提前记录在原数组的下标),并用cnt计数,当cnt=k时就是该区间的第k大数。#include <cstdio>#include <cstring>#include <algorithm>...原创 2019-08-24 17:42:02 · 278 阅读 · 0 评论 -
POJ2828(线段树逆序插入)
题意:插队的问题,每个样例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后面,问最后的队伍的排列?思路:最后一个人的位置一定是确定的。依次倒着插入。#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#pragma ...原创 2019-08-12 12:35:51 · 278 阅读 · 0 评论 -
POJ3277(线段树+扫描线/矩形面积并)
题意:给你n个矩形的左下角坐标和右上角坐标,求矩形相并的面积。思路:扫描线法,从下往上扫描。把每个建筑的底部看做一个边,其高度为0,1来记录下边。剩下的就是矩形面积并了。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1...原创 2019-08-21 21:05:00 · 243 阅读 · 0 评论 -
Hdu1542_Atlantis(扫描线+线段树求矩形面积并)
题意:给你n个矩形的左下角坐标和右上角坐标,求矩形相交的面积。思路:先学习一下矩形面积并。矩形面积并就是把这一堆矩形切分成不同的矩形条来处理,每个矩形条的高度就是相邻矩形条的高度之差,而长度就是当前扫描线经过的这些矩形的长度和(用线段树来统计),长度*高度就是这一小块的面积,这样一条一条处理,最终一大块不规则的图形就处理完了。参考:https://blog.youkuaiyun.com/WhereI...原创 2019-08-21 21:05:44 · 251 阅读 · 0 评论 -
Hdu4391_Paint The Wall(线段树+剪枝)
题意:刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问2种操作:如果 a=1 :将 l到 r 刷为 z 颜色如果 a=2 :询问 l 到 r 有 多少个 和 z 相同的 节点思路:刚开始没有剪枝,线段树每个节点就存当前区间的颜色,如果当前区间的颜色都一样,都存颜色,否则存为-1(杂色),查询的时候从上到下统计信息。但是这样做太慢了,直接超时。当查询一中颜色c的时候,我...原创 2019-08-22 10:27:51 · 432 阅读 · 0 评论 -
Hdu3265_Posters(线段树矩形面积并)
题意:求矩形面积并,有个变化就是每个矩形里都有一个矩形的洞。思路:每个矩形有个空心,那就把每个矩形分成4个小矩形。转化为矩形的面积并。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1#define rson mid, ...原创 2019-08-22 14:27:38 · 300 阅读 · 0 评论 -
Hdu1255_覆盖的面积(线段树)
题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.思路:参考大佬直到要改这个pushup函数,但理解不够改不出,参考了大佬的博客。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1#define r...原创 2019-08-22 15:45:06 · 169 阅读 · 0 评论 -
Hdu4288_Coder(线段树)
题意:题目中给了三个操作1:add x 就是把x插进去2:delete x 就是把x删除3:sum 就是求下标%5=3的元素的和。插入和删除最后都要保证数列有序。思路:线段树做法:每个节点维护两个值,一个是当前区间的数字个数cnt,另一个是sum[i],sum[i]就是区间内数的下标%5 = i的这些数的和(下标是指当前区间内的,不是整体区间)。向上更新时,父亲的左区间的下标与左儿...原创 2019-08-18 09:59:15 · 233 阅读 · 0 评论 -
Hdu4417_Super Mario(线段树+离线处理or划分树+二分)
题意:给n个数,数中有重复的。有m个询问,问的是[L,R] 区间内有多少个数小于等于h思路:线段树+离线处理这个题用线段树要离线处理(我试了一下在线的,超时了)。先在原数组中存入n个高度和下标,按高度升序排序。对于m此询问,先存储下来,注意存下标,然后按照高度升序排序。由于高度是从小到大的,没读入一个高度,在原数组里找所有比所查询高度小的,将他们在原数组中的下标置为1,然后就是线段树区...原创 2019-08-26 21:27:56 · 222 阅读 · 0 评论 -
POJ3667_Hotel(线段树区间合并)
题意:酒店有n个房间,两种操作:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边2 a b:将[a,a+b-1]的房间清空思路:核心:维护每个区间的最大空余长度是多少。需要3个变量:ls[i]:左端点向右连续最多有多少空房子rs[i]:右端点向左连续最多有多少空房子Tree[i]:整个区间最多连续有多少空房子Tree[i] = max(rs[i * 2]+ls[i *...原创 2019-08-26 21:37:49 · 996 阅读 · 0 评论 -
BZOJ3224_yvj 1728 普通平衡树(权值线段树)
题意:您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入x数删除x数(若有多个相同的数,因只删除一个)查询x数的排名(若有多个相同的数,因输出最小的排名)查询排名为x的数求x的前驱(前驱定义为小于x,且最大的数)求x的后继(后继定义为大于x,且最小的数)思路:平衡树还不会,后面补上。先用权值线段树来做。权值线段树不了解的先看:权值线段树插入删...原创 2019-08-28 16:38:46 · 279 阅读 · 0 评论 -
POJ3225_Help with Intervals(线段树:区间覆盖+区间异或)
题意:维护一个集合S。S一开始是空集,并根据下列命令被修改:Command SemanticsU T S ← S ∪ TI T S ← S ∩ TD T S ← S − TC T S ← T − SS T S ← S ⊕ TInput输入包含一组测试数据,由0到65,535条命令组成。每条命令占一行,形式如下:X T其中X是‘U’、‘I’、‘D’、‘C’和‘S’中的一个,T是...原创 2019-08-15 15:03:22 · 203 阅读 · 0 评论 -
ZOJ2706_Thermal Death of the Universe(线段树)
题意:给n个数,m个操作,每次把区间[l,r]的数用它们都的它们的平均值替代,当它们的平均值不是整数时,若前n个数的和小于最初n个数的和就向上取整,不然就向下取整,最后输出每个数思路:线段树区间更新,区间求和。易错点是:关于正数和负数的整除问题,正数整除是自动向下取整的,但负数是向上取整的。即13/3 = 4.3舍为4, 但-13/3 = -4.3 舍为-4注意:两个int相乘要强制类型...原创 2019-08-11 13:57:39 · 157 阅读 · 0 评论 -
Hdu4199_Colourful Rectangle(多色矩形面积并)
题意:给n个矩形,每个矩形是R、G、B三种颜色中的一种,三种颜色的混合可以得到7种颜色分别为R, G, B, RG, RB, GB, RGB。求每种颜色的面积。思路:红,绿,蓝分别用001, 010, 100表示,混色用位运算|上即可。线段树每个节点都记录每种颜色的有效长度,向上更新到根节点,这样每次根据根节点各颜色的长度*高度来累加到各颜色的面积中即可。#include <cst...原创 2019-08-23 22:52:38 · 255 阅读 · 0 评论 -
POJ3468_A Simple Problem with Integers(树状数组or线段树)
题意:输入 n, m表初始有 n 个数, 接下来 m 行输入两种操作:Q x y 表示询问区间 [x, y]的和;C x y z 表示区间 [x, y] 内所有数加上 z 。思路:线段树模板题。区间更新,区间求和查询也可以用树状数组来做。摘自:https://www.cnblogs.com/RabbitHu/p/BIT.html先回顾区间更新,单点查询的树状数组。再来看区间修改,...原创 2019-08-05 18:46:41 · 239 阅读 · 0 评论 -
Hdu1754_I Hate It(线段树)
题意:单点更新,区间查询最值。思路:线段树入门#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#pragma comment(linker, "/STACK:102400000,102400000")#define lson root &l...原创 2019-08-05 19:22:09 · 241 阅读 · 0 评论 -
Fzu1608_Huge Mission(区间更新+区间求和)
题意:给定M个区间 (1 <= M <= 500000)和这些区间上的权值,求最终并区间的最大权值总和(某个区间不能被计算两次)。http://acm.fzu.edu.cn/problem.php?pid=1608思路:大权值一定会取代小权值,所以可以先将所有线段按权值排序,更新的时候后面的直接覆盖前面的即可。#include <cstdio>#include...原创 2019-08-08 11:27:13 · 288 阅读 · 0 评论 -
Hdu3071_Gcd & Lcm game
摘自:https://www.cnblogs.com/fzl194/p/9034201.html题意:给定一个长度为n的序列m次操作,操作的种类一共有三种:查询L :查询一个区间的所有的数的最小公倍数modpG :查询一个区间的所有的数的最大公约数modp修改C :将给定位置的值修改成x思路:上面的博客讲的很清楚,可以去看。其实是一个单点更新的线段树,有波折的是这个gcd,lc...原创 2019-08-08 20:20:51 · 310 阅读 · 0 评论 -
POJ2528_Mayor's posters(线段树区间染色)
题意:一个无限长的板子,然后依次往上面贴n张和板子等高的海报,问你最后能看到多少张海报(漏出来就算)思路:https://www.cnblogs.com/xuejianye/p/5694750.html线段树区间更新问题,但是要注意,给的长度的可能非常大,有1e9,不加处理直接维护一个线段树肯定会MLE,TLE,但是我们注意到一共最多只有2e4个点,因此我们可以用离散化的思想先对区间进行预...原创 2019-08-18 19:30:51 · 172 阅读 · 0 评论 -
POJ2777_Count Color(区间染色+区间查询)
题意:色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格。并从左到右标记为1, 2, … L。现在色板上只有一个颜色,老师告诉阿宝在色板上只能做两件事:1. “C A B C” 指在A到 B 号方格中涂上颜色 C。2. “P A B” 指老师的提问:A到 B号方格中有几种颜色。思路:线段树区间染色。颜色有最多30种,用一个int型整数的每一位来表示一种颜色。初始...原创 2019-08-18 20:17:19 · 329 阅读 · 0 评论 -
Hdu5023_A Corrupt Mayor's Performance Art(线段树区间染色+区间查询)
题意:一块色板上只能做两件事:1. “P A B C” 指在A到 B 号方格中涂上颜色 C。2. “Q A B” 指老师的提问:A到 B号方格中有哪几种颜色。初始时全部涂成2号颜色。思路:常规的线段树区间染色。#include <cstdio>#include <cstring>#include <algorithm>#define lson ro...原创 2019-08-18 20:39:43 · 274 阅读 · 0 评论 -
Hdu4027(线段树开根号区间求和)
题意:给定100000个数,两种操作,0 i j表示将i j这段的数字都开根号(向下取整)1 i j表示查询i j之间的所有值的和所有的和都不超过64位思路:如果直接用线段树更新会tle,此题的关键是要理解对任何64位以内的值,开根号最多不会超过7次,所以用线段树做,更新到叶子节点的次数最多7次,如果叶子节点已经更新为1了,那么再开根号也不会变了。#include <cstdi...原创 2019-08-19 09:48:59 · 617 阅读 · 0 评论 -
POJ3264_Balanced Lineup(区间最值查询)
题意:求给定区间内的最大值和最小值之差思路:RMQ#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#pragma comment(linker, "/STACK:102400000,102400000")typedef long long ...原创 2019-08-07 13:02:14 · 194 阅读 · 0 评论 -
Hdu3308--LCIS(线段树区间合并)
题意:给你n个数,m个操作。操作有两种:1.U x y 将数组第x位变为y (下标从0开始)2. Q x y 问数组第x位到第y位连续最长子序列的长度。对于每次询问,输出一个答案思路:线段树单点修改区间合并对于每个区间节点维护3个值:ls[root]:以区间左端点开始的最长连续上升序列长度(前缀序列)rs[root]:以区间右端点结束的最长连续上升序列长度(后缀序列)Tree[...原创 2019-08-19 19:05:12 · 235 阅读 · 0 评论 -
Hdu1828_Picture(线段树矩形周长并)
题意:矩形周长并(轮廓线长度)思路:我们可以分开求,周长分为x轴上的和y轴上的从下往上扫描,首先看x轴的边,第一条边我们可以直接加出贡献,如果第二条边我们和第一条有覆盖部分,那么我们要怎么加呢,我们会发现要加的也就是 ( 加入这条边后的有效长度和没加之前的有效长度的差值),只要加入一条边使得整个有效长度变化了(变大或变小),都说明它没有被其他边完全覆盖掉,它有一部分是露出来的,所以它对总...原创 2019-08-23 22:42:42 · 269 阅读 · 0 评论 -
Hdu5249_KPI(权值线段树)
题意:每组数据第一行有一个n(1≤n≤10000),代表服务记录数。接下来有n行,每一行有3种形式“in x”: 代表重要值为x(0≤x≤109)的请求被推进管道。“out”: 代表服务拉取了管道头部的请求。"query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(m/2)+1th 条请求的重要值.为了让题目简单...原创 2019-08-28 17:31:46 · 293 阅读 · 0 评论