
线段树
文章平均质量分 91
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
求区间最大连续子段和.new(线段树)
这个故事是这样的:在n年前,憨憨博主在参加省队集训的时候,第一次接触到了这个问题:区间最大连续子段和,于是博主就开始一阵恶补,get了这种新技能然而在夏季的一个宁静的午后,博主的优快云突然接到消息通知,发现好心的大佬给我指出了我写的代码的不足,憨憨博主非常惭愧。。。前端时间都在忙着大学的各种事项,没有抽出时间来修正这个错误十一假期留校,突然想起来了我好像还有个大坑没有填,于是就上网查看......原创 2019-10-03 15:59:09 · 2442 阅读 · 8 评论 -
bzoj3333 排队计划(线段树)
题目链接分析: 对于在pp之前的位置,与其产生的逆序对个数是不会改变的 而在pp之后没有被选出的数,与其产生的逆序对个数也不会改变 被选出的数,ta们之间的逆序对经过排序后就都消除了 减少的逆序对个数:每个被选出的数字之后比ta小的数的个数建立一个线段树,每个结点记录原序列该位置上的数 同时统计ta和后面的数形成的逆序对个数(在ta后面比ta小的数的个数)每次询问,我们从p−np-n中不断原创 2018-02-07 10:22:58 · 337 阅读 · 0 评论 -
cv1228 苹果树(树链剖分)
题目链接分析: 练了一下链剖的基本操作#include#include#includeusing namespace std;const int N=100005;int n,m,st[N],tot=0,t[N2];struct node{ int y,nxt;};node way[N1];int top[N],size[N],son[N],deep[N],原创 2018-02-07 08:25:14 · 195 阅读 · 0 评论 -
cv3304 水果姐逛水果街Ⅰ(线段树)
题目链接分析: 线性结构问题,可以用线段树解决 每个结点维护: mx:区间最大值 mn:区间最小值 ls:从左向右走得到的最大差值 rs:从右向左走得到的最大差值对于ls和rs的维护: ans.ls=max(lc.ls,rc.ls,rc.mx−lc.mn)" role="presentation" style="position: relative;">ans.原创 2018-02-07 07:26:37 · 278 阅读 · 0 评论 -
Vijos1881 闪烁的繁星
题目链接分析: 线段树暴力维护交错序列每个结点维护左端点的状态,右端点的状态, 从左端开始的最长交错序列,从右端开始的最长交错序列,整个区间的最长交错序列update的时候想清楚就好了答案即为根结点的最长交错序列tip10min顺利AC#include#include#includeusing namespace std;const int N=2000原创 2018-02-06 21:13:56 · 188 阅读 · 0 评论 -
Vijos 1901 学姐的钱包(线段树优化dp)
题目链接分析: 学长讲的线段树例题我们可以将钱数看做是一个数轴 将一次交换看成数轴上的一个线段:(R[i]−V[i])" role="presentation" style="position: relative;">(R[i]−V[i])(R[i]−V[i])(R[i]-V[i]) 那么题目就可以视为带权值的线段覆盖问题如果不带权值,就是贪心的经典问题 而此问题原创 2018-02-06 16:57:30 · 314 阅读 · 0 评论 -
bzoj4311 向量(线段树分治+凸包)
题目链接分析: 我们按照时间种一棵线段树 每一个向量出现在一段时间里,我们就可以区间添加这个向量 在每个线段树的每个结点中用当前有的向量维护一个上凸壳为什么要维护上凸壳呢? 题目要求最大点积 我们知道,点积的公式:x1x2+y1y2x1x2+y1y2x_1x_2+y_1y_2 已知x1,y1x1,y1x_1,y_1,上式就可以转化成一个类似线性规划的东西 显然最优解在凸包上...原创 2018-02-09 08:58:48 · 508 阅读 · 0 评论 -
hdu1823 Luck and Love(二维线段树)
题目链接分析: 第一个想法就是按照身高排序 身高相同的就按照活泼度排序 询问就是一个区间[x1~x2,y1~y2]的最大值 如果我们把每一个妹子按照我们的排列顺序写成一个矩阵,那么询问的就是一个子矩阵的最大值子矩阵最大值,一个二维问题 我就想能不能用CDQ做, 但是因为是一个区间,每一维都是有上下界的,而且询问的是最大值,CDQ不是很好搞 那我们就用最暴力的一种方法:二维线段原创 2018-01-19 21:52:26 · 287 阅读 · 0 评论 -
hdu4819 Mosaic(二维线段树)
题目链接分析: 二维线段树的模板 线段树都很熟悉了 二维只不过是在每一个线段树结点中再开一棵线段树tip一定要头脑清楚,很容易写错(可能是因为第一次写) 注意:x坐标的update放在了y坐标的构建中 因此传入的时候,不能妨碍到正常的区间边界判断数组版,比较优美(就是变量名不是很高大上)#include#include#includeusing namespa原创 2018-01-19 19:53:52 · 350 阅读 · 0 评论 -
bzoj2325 [ZJOI2011]道馆之战(树链剖分+线段树)
Description口袋妖怪(又名神奇宝贝或宠物小精灵)红/蓝/绿宝石中的水系道馆需要经过三个冰地才能到达馆主的面前,冰地中的每一个冰块都只能经过一次。当一个冰地上的所有冰块都被经过之后,到下一个冰地的楼梯才会被打开。三个冰地分别如下: 当走出第三个冰地之后,就可以与馆主进行道馆战了。馆主发现这个难度太小,导致经常有挑战者能通过,为了加大难度,将道馆分成了n个房间,每个房间中是两个冰块原创 2018-02-03 22:00:19 · 303 阅读 · 0 评论 -
bzoj3995 [SDOI2015]道路修建
题目链接分析: 曲神的题解 (曲神表示想要结构体版本的代码,题解最后给出的就是结构体的代码)bzoj1018的进阶版一开始看到这道题:好像不是很难,用线段树维护最小生成树 update的时候直接判断上下哪一条横边比较小,连接即可然而一下就发现了bug: 存在可能性连接点的上下两条边都需要连接 那我们就要深入讨论 代码中的区间划分方式和平成不大一样: [l.r...原创 2018-02-07 19:06:43 · 389 阅读 · 0 评论 -
真·奥义·随意的hu测(18.2.28)
今天的hu测真心随意,也没有好好写代码T1,T3真心难 大家就当看着玩吧T1 题解: 对于一个良好数列,我们考虑按数值从小到大加入数列中的元素若当前加入的元素中最大值为x,若数列中一个区间内的数大于x,则那些位置出现空缺,且空缺两端都是x,我们称这类区域为待补区域对于一个良好数列,在上述加入元素过程中出现过的任一数列,我们称之为准良好数列由准良好数列从...原创 2018-02-28 17:23:29 · 240 阅读 · 0 评论 -
bzoj3272 Zgg吃东西(线段树模拟费用流)
题目链接题目大意 给定数列{an}{an}\{a_n\},要求维护以下操作和询问: 将aiaia_i赋值为valvalval 在区间[l,r][l,r][l,r]中选出最多kkk个互不相交的子段列,最大化这些选中的数的和,输出这个最大值 操作和询问共mmm个分析: 首先看一下暴力怎么解决这个问题: 把一个数拆成两个点,作为XXX部和YYY部 XXX部的点向YYY部的对...原创 2018-03-16 14:16:43 · 913 阅读 · 0 评论 -
R1前最后一次hu测
T1.xiz 分析: 题目描述不准确,不过样例很准确考虑记一个www数组,w[i]w[i]w[i]表示字符iii与上一个和ta相同的字符在字符串中的距离,如果没有则记为0 这样T的w[i]w[i]w[i]可以很容易的表示出来但有个问题,在SSS中www数组是随着匹配位置变化的 这题一般有两种做法,一种是用kmp匹配,一种是哈希网上dada的题解(果然是dada,看不大懂...原创 2018-04-02 14:55:44 · 324 阅读 · 0 评论 -
bzoj4383 [POI2015]Pustynia(线段树优化建图+差分约束)
Description给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],…,a[r-1],a[r]里这k个数中的任意一个都比任意一个剩下的r-l+1-k个数大(严格大于,即没有等号)。 请任意构造出一组满足条件的方案,或者判断无解。Input第一行包含三个正整数n,s,m(...原创 2018-03-21 09:11:34 · 303 阅读 · 1 评论 -
bzoj3939 [Usaco2015 Feb]Cow Hopscotch(dp+线段树||CDQ)
DescriptionJust like humans enjoy playing the game of Hopscotch, Farmer John’s cows have invented a variant of the game for themselves to play. Being played by clumsy animals weighing nearly a ton, Co...原创 2018-03-14 11:24:46 · 221 阅读 · 0 评论 -
hdu5669 Road(线段树优化建图+分层图最短路)
题目链接分析: 又是区间连边,所以考虑用线段树优化建图设dis[i][j]dis[i][j]dis[i][j]表示到点iii,飞行了jjj次的最小距离 dijkstra转移即可tip%%%CA爷看了一下前辈的题解,发现有一种叫做“分层图最短路”的算法 好高大上,实际上就是dis[i][j]dis[i][j]dis[i][j]的转移(这不是dp吗)。。。orzWA了。。...原创 2018-03-19 20:39:32 · 338 阅读 · 0 评论 -
bzoj3073 [Pa2011]Journeys(线段树优化建图+堆优dijkstra)
DescriptionSeter建造了一个很大的星球,他准备建造N个国家和无数双向道路。N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a<=x<=b,c<=y<=d,那么在xy之间建造一条道路。Seter保证一条道路不会修建两次,也保证不会...原创 2018-03-19 17:42:21 · 461 阅读 · 0 评论 -
bzoj4977 [Lydsy八月月赛]跳伞求生(线段树模拟费用流||贪心)
题目链接分析: 显然,如果一个勇士(没错,我就是愿意称这些人为勇士)弱到一个敌人也干不掉,那么我们就可以把ta开了 每个人只有攻击比ta弱的敌人才有意义 于是我就建出如下的网络(忽略GG的勇士,每个勇士只向比ta弱的敌人连边): 问了一下舒老师,舒老师给出了另一种建图方法(包含题目给出所有信息): 从勇士直接连向汇点,表示不启用这个勇士 这样我们求一个最大费用最大流即可...原创 2018-03-18 09:27:27 · 387 阅读 · 0 评论 -
舒老师AK的hu测 T2. LX还在迷路(线段树+等差数列)
版权属于舒老师,想要引用此题(包括题面)的朋友请联系博主 分析:这道题是舒老师的原创题(版权声明~)神题啊,毒瘤题啊正解首先,我们可以先忽略n(n+1)2n(n+1)2n(n+1) \over 2中的22 \over 2,最后再处理即可 我们将n(n+1)n(n+1)n(n+1)展开,得到n2+nn2+nn^2+n 我们可以把一个操作拆成两个: ① 对[...原创 2018-03-12 09:53:31 · 857 阅读 · 0 评论 -
翔哥的hu测 T3. 刁难老师(平衡树+线段树)
版权属于ZYXZYXZYX,想要引用此题(包括题面)的朋友请联系博主 题目来源:[2016国家集训队互测] 基础排序算法练习题(金策)原题提交地址分析: 防AK毒瘤题啊。。。1. 预备技能——消逆序对排序:O(q(m+n²)log n)对于一个序列,找到其中一个位置iii满足a[i]>a[i+1]a[i]>a[i+1]a[i]>a[i+1],交换...原创 2018-03-10 21:50:48 · 413 阅读 · 0 评论 -
bzoj3638 cf172 k-Maximum Subsequence Sum(线段树模拟费用流)
Description给一列数,要求支持操作: 1.修改某个数的值 2.读入l,r,k,询问在[l,r]内选不相交的不超过k个子段,最大的和是多少。InputThe first line contains integer n (1 ≤ n ≤ 105), showing how many numbers the sequence has. The next line contains n inte...原创 2018-03-16 15:11:26 · 288 阅读 · 0 评论 -
bzoj3196 二逼平衡树(线段树+splay)
Description您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为小于x,且最大的数) 5.查询k在区间内的后继(后继定义为大于x,且最小的数)Input第一行两个数 n,m 表示长度为n的有序序列和m个操作 第二行有n个数,表示有原创 2018-01-18 14:50:05 · 411 阅读 · 0 评论 -
bzoj2141 排队(线段树+splay)
题目链接分析: 之所以找到这道题是因为不想写dp了 看到网上的题解都是:分块+线段树,树状数组+线段树。。。立志自己想解法 一开始我在想,能不能用CDQ搞 但是CDQ版的动态逆序对好像是单点修改实际上逆序对的个数就是每个数字形成的逆序对之和 而每个数会和在ta之前比ta大的数以及在ta之后比ta大的数形成逆序对 a: 1 5 2 4 6 8ni: 0 2 1 1 0原创 2018-02-01 21:00:55 · 333 阅读 · 0 评论 -
bzoj1018 [SHOI2008]堵塞的交通traffic
题目链接分析: 这道题的题解很长,所以就不粘题面了,我们一点一点讲明白这道题可以很高兴的发现10w是线段树能够承受的范围 我们可以利用线段树维护连通性,每个节点内我们要维护6个信息,分别表示连通性: 读入完成后,我们面临的第一个问题就是道路的状态改变这就牵扯到了一个change函数在link函数中,我们只维护了向下走的直接连通性 至于其他的连通性,我们在up原创 2017-09-20 20:43:25 · 359 阅读 · 0 评论 -
luoguP1558 色板游戏
题目背景阿宝上学了,今天老师拿来了一块很长的涂色板。题目描述色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格。并从左到右标记为1, 2, … L。现在色板上只有一个颜色,老师告诉阿宝在色板上只能做两件事:1. “C A B C” 指在A到 B 号方格中涂上颜色 C。2. “P A B” 指老师的提问:A到 B号方格中有几种颜色。学校的颜料盒中一共有 T 种颜料。为简便起原创 2017-09-11 09:39:22 · 511 阅读 · 0 评论 -
luoguP1198 [JSOI2008]最大数
题目描述现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:L不超过当前数列的长度。 2、 插入操作。 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。 限制:n是整数(可能为......原创 2017-09-08 19:25:36 · 224 阅读 · 0 评论 -
bzoj3165 [Heoi2013]Segment
Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段。记第i条被插入的线段的标号为i。 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号。 Input 第一行一个整数n,表示共n 个操作。 接下来n行,每行第一个数为0或1。 若该数为 0,则后面跟着一个正整数 k,表示询问与直线 x = ((k +lastans–1原创 2017-08-22 20:10:49 · 294 阅读 · 0 评论 -
CF811E(线段树+并查集)
http://codeforces.com/problemset/problem/811/E cf的题面真的是做的美美的, 所以就直接扔超链接了分析: 线段树的叶子结点维护一列的信息 包括左右端点,有多少联通块,以及左右两列的并查集情况 需要注意的是, 这次代码中的update返回的是一个node 第一次代码re的原因就是在返回的这个新建的node中 我没有维护左右端点tip在upd原创 2017-08-20 20:10:19 · 1578 阅读 · 3 评论 -
bzoj1588营业额统计
Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况原创 2017-07-27 18:14:09 · 318 阅读 · 0 评论 -
poj3667Hotel
DescriptionThe cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has nam原创 2017-08-03 10:02:15 · 368 阅读 · 0 评论 -
bzoj1835基站选址(dp+线段树)
Description 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di。需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci。如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站,那么就成它被覆盖了。如果第i个村庄没有被覆盖,则需要向他们补偿,费用为Wi。现在的问题是,选择基站的位置,使得总费用最小。Input 输入数据 (base.in) 输原创 2017-08-01 14:56:39 · 498 阅读 · 0 评论 -
阿 Q 的停车场
问题描述 刚拿到驾照的 KJ 总喜欢开着车到处兜风,玩完了再把车停到阿 Q 的停车场里,虽然 她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是 Kelukin。于是, 她每次都把自己的爱车停在距离其它车最远的一个车位。KJ 觉得自己这样的策略非常科 学,于是她开始想:在一个停车场中有一排车位,从左到右编号为 1 到 n,初始时全部是 空的。有若干汽车,进出停车场共 m 次。对于原创 2017-07-16 22:30:21 · 1474 阅读 · 2 评论 -
bzoj4653 [Noi2016]区间
Description在数轴上有 n个闭区间 [l1,r1],[l2,r2],…,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。 对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−li,即等于它原创 2017-09-02 11:26:03 · 425 阅读 · 0 评论 -
hdu1264 Counting Squares
Problem Description Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integer原创 2017-09-02 17:31:10 · 440 阅读 · 0 评论 -
hdu3265 Poster(扫描线)
题目链接(带翻译)分析: 这道题很好的体现了扫描线的特点扫描线是线段树标记永久化的一种应用最开始我学习的都是计算矩形面积并的程序 每次在加入一条边的时候,只用在logn个节点上打上标记即可,不用下传标记 这样在对应删除的时候,就可以再次找到这些标记,删除即可但是这道题的大矩形中出现了小的矩形空隙first.一开始我简单的认为,只要把矩形空隙的前一条边ff设为-1 后一条边设为1,就可以直接做原创 2017-09-02 20:44:15 · 293 阅读 · 0 评论 -
bzoj3938 Robot(超哥线段树)
Description小q有n只机器人,一开始他把机器人放在了一条数轴上,第i只机器人在ai的位置上静止,而自己站在原点。在这之后小q会执行一些操作,他想要命令一个机器人向左或者向右移动x格。但是机器人似乎听不清小q的命令,事实上它们会以每秒x格的速度匀速移动。看着自己的机器人越走越远,小q很着急,他想知道当前离他(原点)最远的机器人有多远。具体的操作以及询问见输入格式。注意,不同的机器人之间互不原创 2018-01-16 20:09:53 · 419 阅读 · 0 评论 -
bzoj1568 [JSOI2008]Blue Mary开公司(超哥线段树)
DescriptionInput第一行 :一个整数N ,表示方案和询问的总数。 接下来N行,每行开头一个单词“Query”或“Project”。 若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。 若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。Output对于每一个Query,输出一个整数,表示原创 2018-01-15 21:29:25 · 294 阅读 · 0 评论 -
李超线段树
前言: wdmy,真的是很难学啊。。。用一道例题来引入3165: [Heoi2013]Segment[Submit][Status][Discuss]Description要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段。记第i条被插入的线段的标号为i。 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号。 Input 第一行一个整数n,表示共n原创 2018-01-15 17:37:49 · 264 阅读 · 0 评论 -
bzoj4515 [Sdoi2016]游戏(树链剖分+超哥线段树)
题目链接分析: 这道题要是让我做,就是模拟暴力 我们的目的是通过这道题学习一下超哥线段树在树上的区间修改,维护最小值 可以立刻联想到树链剖分用线段树维护最小值但是这个disdis让人很不爽啊 显然s~t的路径可以分成s~lca和lca~t两条路径 令deep[x]deep[x]表示xx的深度, 对于s~lca上面的点xx,修改的值相当于a∗(deep[s]−deep[x])原创 2018-01-15 14:50:04 · 384 阅读 · 0 评论