
线段树
文章平均质量分 87
Tizzii
这个作者很懒,什么都没留下…
展开
-
蓝桥杯校内模拟赛 第10题
一、内容问题描述小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。 这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。 小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。 小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个...原创 2020-03-14 12:12:38 · 3270 阅读 · 0 评论 -
Transformation HDU - 4578 多重懒标记 || 简洁暴力做法
一、内容 Yuanfang is puzzled with the question below:There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations.Operation 1: Add c to each number betwe...原创 2020-01-28 20:19:15 · 1059 阅读 · 0 评论 -
Tunnel Warfare HDU - 1540 3种思路 线段树 || 树状数组+二分 || STL
一、内容 During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Ex...原创 2020-01-28 17:21:17 · 1149 阅读 · 2 评论 -
Get The Treasury HDU - 3642 扫描线 +体积交
一、内容 Jack knows that there is a great underground treasury in a secret region. And he has a special device that can be used to detect treasury under the surface of the earth. One day he got outside w...原创 2020-01-27 17:58:57 · 863 阅读 · 0 评论 -
覆盖的面积 HDU - 1255 2种思路透彻理解扫描线
一、内容 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.Input输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个矩形的左上角坐标和右下角坐标,矩形的上下边和X轴平行,左右边和Y轴平行.坐标的范围...原创 2020-01-27 14:18:38 · 2245 阅读 · 2 评论 -
Atlantis HDU - 1542 扫描线模板
一、内容 There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describ...原创 2020-01-26 19:53:05 · 821 阅读 · 0 评论 -
Crane POJ - 2991 区间更新 + 计算几何
一、内容ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of various lengths, connected by flexible joints. The end of the i-th segment is joined to the beginning of the i + ...原创 2020-01-24 17:45:07 · 3252 阅读 · 0 评论 -
ases and Flowers HDU - 4614 区间更新 + 二分查找 || 区间更新 + 第k个值判断
一、内容 Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to N-1. When she receive some flowers, she will try to put them in the vases, one flower in one va...原创 2020-01-24 14:11:41 · 1947 阅读 · 0 评论 -
约会安排 HDU - 4553 区间合并
一、内容寒假来了,又到了小明和女神们约会的季节。 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会。与此同时,也有很多基友找他开黑,由于数量实在过于巨大,怎么安排时间便成了小明的一大心事。 我们已知小明一共有T的空闲时间,期间会有很多女神或者基友来找小明。 作为一个操作系统曾经怒考71分的大神,小明想到了一个算法,即“...原创 2020-01-20 11:59:58 · 855 阅读 · 1 评论 -
Assign the task HDU - 3974 dfs序 +线段树
一、内容 There is a company that has N employees(numbered from 1 to N),every employee in the company has a immediate boss (except for the leader of whole company).If you are the immediate boss of someone...原创 2020-01-16 11:46:55 · 758 阅读 · 0 评论 -
Horrible Queries LightOJ - 1164 区间修改 + 区间查询
一、内容World is getting more evil and it's getting tougher to get into the Evil League of Evil. Since the legendary Bad Horse has retired, now you have to correctly answer the evil questions of Dr. Horr...原创 2020-01-14 09:42:39 · 857 阅读 · 0 评论 -
I Hate It HDU - 1754 线段树模板题
一、内容 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M&...原创 2020-01-13 11:56:20 · 763 阅读 · 0 评论 -
CodeForces - 1263E 线段树
一、内容The development of a text editor is a hard problem. You need to implement an extra module for brackets coloring in text.Your editor consists of a line with infinite length and cursor, which point...原创 2019-12-12 18:34:39 · 430 阅读 · 0 评论 -
CodeForces - 914D gcd +线段树
一、内容题意:给定一段区间,查询区间的gcd值是否是给出的,若是输出YES,不是输出NO,可以假定修改某一个值,并不是真正的修改序列中的这个值,而是在计算的时候认为是修改了。二、思路由于最多能改变一个数,所以我们先用线段树维护区间的gcd。然后在查询的时候,查询有多少值不能被给出的x整除, 若查询出的结果 <= 1代表 这多出来的1个可以修改,然后输出YES ,否则输出NO因为一段...原创 2019-09-25 17:36:41 · 351 阅读 · 0 评论 -
CodeForces - 877E dfs序 + 线段树
一、内容题意:给定一个以1为根节点的树, 有2个操作,get V 代表得到v 和v的子树中所有开着灯的房间数,pow V代表把V和 V的子树们状态转换一下,开着的灯关上,关着的灯开起。二、思路dfs序将树转化为线性结构。用一个flag标记维护转变的状态,一个区间转变2次就等于没转变,所以每次flag ^= 1。sum保存区间上面1的个数,若果遇到转化,就将区间长度减去sum里面的值。...原创 2019-09-25 15:51:39 · 403 阅读 · 0 评论 -
CodeForces - 855B dp or 线段树
一、内容题意: 给定p,q,r , 在一组序列中选出pi,pj,pk (i <= j <= k)使得 p * pi + q * pj + r * pk的值最大二、思路1 用线段树维护区间最大最小值,然后枚举一下那个值会获取最大值即可。2 dp做法。dp[0][i] 表示当前的数选到了i已经用了p的最大值。dp[1][i] 表示当前的数选到了i位置,已经选了q的最大值。 j...原创 2019-09-25 15:36:27 · 373 阅读 · 0 评论 -
HDU 3397 线段树多标记
一、内容题意:给定一组01字符串,给定5个操作,操作0将区间变为0,操作1区间变为1,操作2区间0变1,1变0,操作3查询区间1的总个数,操作4查询区间最大连续的1的个数。二、思路用val来对01进行标记,初始值为-1,等于0代表这区间都是0,等于1代表区间都是1。用mx_1 来求出连续的1的最大个数。flag记录是否转换,一个区间执行2次转化等于没执行, 所以每次对flag ^= 1...原创 2019-09-25 09:46:11 · 454 阅读 · 0 评论 -
HDU - 1394 树状数组 + 逆序对
一、内容题意:给定0-N-1的乱序序列,从这个序列可以形成n-1中序列,即每次移动第一个元素到最后,生成一个新的序列,然后又从这个新序列的第一个移动到最后又生成新的。求这些序列中逆序对最少的数量。二、思路由于题目是从0开始,所以全部进行+1操作。叫你求n次逆序对,找出最小的那一次。把第一个数移到后面的话,逆序对的个数会增加比这个数大的个数。减少比这个数小的个数。用树状数组求一下就可以...原创 2019-09-20 21:25:59 · 335 阅读 · 0 评论 -
HDU - 1556 区间修改
一、内容题意:给定一个序列1—N,给定几组区间,每个区间进行涂色,问最后每个点被涂了几次。二、思路差分数组这里使用线段树lazy标记。查询的时候查询到每个单点。三、代码#include <cstdio>#include <cstring>typedef long long ll;const int maxn = 1e5 + 5;int n, x, y...原创 2019-09-20 20:05:57 · 301 阅读 · 0 评论 -
HDU - 5775 经典排序 +线段树
一、内容题意: 给定一个数字N,代表数字1,2,3…N,然后给定n个数字的序列,询问经过很多次的冒泡排序后,每个数字(1-N) 中在序列中出现的最左边的位置-最右边的位置的绝对值。二、思路经过推导可以得出,如果一个数字最开始的位置大于等于它本身(i >= num[i])那么答案就是原始序列中它左边比他大的数的个数。同理,如果提个数字最开始的位置小于它本身(i < num[i]...原创 2019-09-20 16:14:23 · 332 阅读 · 0 评论 -
[java] CF438D The Child and Sequence
一、 内容The Child and Sequence二、思路区间取模 + 单点修改 + 区间求和和区间开方一样,由于每个点取模次数不大,故用一个数组max记录区间中的最大值,若最大值小于要mod的数,就跳过这个区间,否则就一直延伸至单点取余。三、代码import java.io.BufferedReader;import java.io.IOException;import...原创 2019-09-10 15:05:02 · 271 阅读 · 0 评论 -
洛谷 P3373 【模板】线段树 2
一、思路区间乘 + 区间加用一个数组lazyM保存区间乘, 一个数组lazyP保存区间加。 如何进行pushdown呢?假设一个区间的总和值是sum。 ((sum * b) + c ) * d = sum *bd + cd。 所以lazyM数组里面保存bd, lazyP数组里面保存cd。若当前的操作是+。 我们只需要让lazyP 数组加上该数, 若是 *,让lazyM数组 * 上该...原创 2019-09-10 20:07:04 · 352 阅读 · 0 评论 -
HDU 4417 主席树模板
一、思路通过upper_bound() 函数来找到最后一个大于k的数所在的下标,然后查询在某个区间内,【1,h】中所有数出现的次数就可以了。二、代码#include <cstdio>#include <vector>#include <algorithm>#include <iostream> using namespace std...原创 2019-09-11 21:34:31 · 278 阅读 · 0 评论 -
主席树模板
#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int maxn = 2e5 + 7;struct node { int l, r, sum; //sum是包含几个元素 } T[maxn * 50];int n, m, cnt, a...原创 2019-09-11 21:35:28 · 281 阅读 · 0 评论 -
POJ-2528 线段树 区间修改
一、内容二、思路就是求一共有多少张海报自己能够看到,给每张海报附上一个颜色,最后求自己能够看到多少种颜色。对数据进行离散化,由于是对一段进行连续化,故当2个点之间的差值大于1时,应该在中间再添加一个点。 比如 【1, 10】 【1,4】【5, 10】 离散化后是【1,4】【1,2】【3, 4】然而 【1, 10】 【1,4】【6, 10】离散化后也是【1,4】【1,2】【3, ...原创 2019-09-13 13:03:03 · 1023 阅读 · 2 评论 -
HDU - 1698 区间修改 + 线段树
一、内容题意:给定一个区间,初始值都是1,和几组询问,每次询问将一段区间修改成某个值,最后求所有区间的和。二、思路用一个数组sum进行lazy标记和下放就可以了, 如果这个区间有多个数那么这个区间sum[id] = -1, 若这个区间全部是一个相同的数那么sum[id]=相同数。进行pushdown()的时候,只需要讲左右儿子区间赋值为sum[id], sum[id] = -1即可最...原创 2019-09-14 09:35:30 · 963 阅读 · 0 评论 -
POJ - 3468 区间修改 + 线段树
一、内容题意:给定一个区间,整个区间增加某个值v,或者多一个区间和进行查询。二、思路lazy进行标记区间和,每次查询和更新时进行pushdown() 将标记下放注意结果可能超出int 所以用64位的整型。三、代码#include <cstdio> #include <cstring>using namespace std;typedef long lo...原创 2019-09-14 10:07:30 · 298 阅读 · 0 评论 -
SPOJ - DQUERY 线段树查询区间不同值
一、内容题意:给定一个序列,和许多区间,查询不同区间内不同数的个数。二、思路用pre数组记录和当前元素值相同的一个元素的位置,若前面没有则为0。将询问离线保存在node数组里面,按照区间r小的排在前面。查询时,用一now记录更新到的位置,每次更新到这次查询的r处,若前面有相同的元素,把前面位置-1,当前位置+1,这样就只保存了一次。三、代码#include <cstdio&g...原创 2019-09-17 17:00:37 · 420 阅读 · 0 评论 -
CodeForces - 540E 树状数组 + 离线
一、内容题意:给定一个连续的无限序列{1,2,3,4,5,6…},然后给出几个区间,将2端的值进行swap,最后求有多少个逆序对。二、思路将题目要进行交换的点都保存下来,然后在把中间没有出现的区间离散化成一个点,权值是这段区间有几个数例如 1 2 5 9 就可以化成 1 2 3 4 5 6 . 3代表【3,4】权值为2,5代表【6,7,8】权值为3。然后用一个vecotr保存这...原创 2019-09-17 21:38:39 · 382 阅读 · 0 评论 -
HDU-5475 线段树求区间乘积
一、内容题意: 有一个初始值为num = 1,给定2种操作,输入1 x代表 num = num * x,输入2 x代表 num 除以第x次的输入的x值。二、思路用线段树维护区间的乘积。每次操作的次数是线段树所在区间,当输入2 x时只需要把x位置的数修改为1就可以了。三、代码#include <cstdio> #include <cstring>typede...原创 2019-09-17 22:23:34 · 659 阅读 · 0 评论 -
POJ - 2777 线段树 + 区间或 + 二进制
一、内容题意:给定一个区间,给定颜色种类1-30,初始所有区间的值都是颜色1,给定2种操作,C a b c将【a, b】修改为颜色c, P a b 查询区间【a, b】上颜色种类数。二、思路由于颜色最多有30种,所以我们可以用二进制上的每一位来表示一种颜色。用lazy数组记录区间修改值,初始区间都是颜色1, 所以修改为lazy[1] = 1, 等后面操作的时候进行下放就行了,就可以不用b...原创 2019-09-18 10:39:30 · 790 阅读 · 1 评论 -
HDU - 4027 线段树+暴力
一、内容给定一段序列,所有值的和不超过263, 给定2种操作 0 x y,将[x, y]区间的数都求平方根,1 x y查询【x, y】区间的和。二、思路由于一个数最多开7,8次平方根就会等于1,所以暴力处理每个点,用maxv记录区间的最大值,若这个区间最大值是1,那就没有必要对这个区间进行更新了。题目给定的x y ,可能x 大于y,注意交换位置。三、代码#include <...原创 2019-09-18 11:33:18 · 943 阅读 · 0 评论 -
POJ-3264 区间查询
一、内容题意:给定一段序列,给定几组操作,查出某区间的最大值和最小值之差。二、思路线段树维护区间最大,最小值就可以了。三、代码#include <cstdio> #include <algorithm>using namespace std;const int maxn = 5e4 + 5;int n, q, a[maxn], maxv[maxn &l...原创 2019-09-18 17:17:25 · 313 阅读 · 0 评论 -
HDU - 4217 静态求第K小的数
一、内容题意:给定一个序列1,2, 3…n, 给定k次操作,每次输入ki,代表删除第ki小的数,最后求删除的数的总和。二、思路用线段树维护每个区间还剩多少个数,初始化都是1,代表本身这个数。查询的时候判断左区间有那么多个数满足要查询的不,如果左区间的个数大于等于ki,那就去左区间找,否则去右区间找 size - sum[id << 1]。 类似主席树动态求第K小的思想。 ...原创 2019-09-18 20:52:30 · 375 阅读 · 0 评论 -
POJ - 3067 树状数组 + 离线
一、内容题意:给定东西2岛, 每个岛上分布很多城市,从1.。。n (东边)和1.。。。。m(西边) 城市按照编号从北向南竖直排列,给定k组高速路,求这些高速路有几个交点。二、思路红色的点为交叉点即输出答案。我们离线保存题目给出的k组高速公路,按照左边(n岛开始)从小到大排序,左边相同按照右边小的排在去前面。用树状数组维护M岛每个点上有多少条边,每天加一条边,在M岛的某点进行加1,然后...原创 2019-09-18 22:43:24 · 444 阅读 · 0 评论 -
SPOJ - HORRIBLE 区间加+区间求和
一、思路简单区间加、区间求和二、代码#include <cstdio>#include <cstring>typedef long long ll;const int maxn = 1e5 +5;int t, n, q, code, x, y;ll sum[maxn << 2], lazy[maxn << 2], add;voi...原创 2019-09-20 10:49:41 · 388 阅读 · 0 评论 -
ZOJ - 1610 区间修改+暴力单点查询
一、内容题意:给定【1,8000】区间,给定n组操作,每次将一段区间修改成某种颜色(对上一次颜色进行覆盖),最后问你能看到多少种颜色,且每种颜色有多少段。二、思路题目给定的区间是**(x, y】左开右闭的区间**进行对区间的修改即可,每次记录下lazy,修改时候pushdown。查询的时候采取单点查询,用last=-1,记录下上一次的颜色从1。。。。8000每个点进行查询如果与上一种颜...原创 2019-09-20 14:12:00 · 856 阅读 · 0 评论 -
[Java] 洛谷P4145 上帝造题的七分钟2 / 花神游历各国
一、内容题目背景XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。题目描述"第一分钟,X说,要有数列,于是便给定了一个正整数数列。第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。第三分钟,k说,要能查询,于是便有了求一段数的和的操作。第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制...原创 2019-09-10 11:20:52 · 377 阅读 · 0 评论