线段树
文章平均质量分 56
A_Comme_Amour
胜利油田第一机房
展开
-
[学习笔记]可持久化数据结构
可持久化学的很懵逼,是因为没有“由浅入♂深”的学习顺序,一上来就看主席树,让我们从最简单的开始。可持久化线段树–访问历史版本如题,你需要维护这样的一个长度为 N N 的数组,支持如下几种操作在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值修改一个点的内容只会修改一条链,所以logn这个大家肯定都懂。我所理解的可持久化线段树就是新建一个节点在上面修改...原创 2018-02-26 15:38:58 · 531 阅读 · 0 评论 -
[vijos1881]闪烁的繁星
题目传送门 N个数,有0/1两种状态,Q个操作:1. 置反单点状态;2. 查询最长交错序列长度(相邻的状态不同) N<=200,000,Q<=200,000题解交错序列只需要在建树的时候把奇数位上的状态置反,变为求最长相同序列 单点修改、全区间查询 本题的pushup函数比较难写代码#include<cstdio>#include<cs...原创 2018-02-25 11:31:47 · 298 阅读 · 0 评论 -
[SLYZ]20180310省选hu测D2(Leaves)
题目绝不毒瘤,各位dalao可以慢慢享用 题目背景 政府出了新政策,特邀 OI 落后的乡村的教师来南方学习。于是,副村长LX就带着S老师和Refun老师, 踏上了飞向南方的飞机。。。。。。 当然,他们是去学(颓)习(废)的。 迷失沃尔玛 题目描述到南方的第一天晚上,副村长 LX 就坐不住了!看着繁华的街市,副村长 LX 兴冲冲地去逛街买东西。可是她不小心在一座...原创 2018-03-11 18:51:57 · 747 阅读 · 2 评论 -
[USACO07OPEN]城市的地平线(线段树/优先队列)
题目传送门 约翰带着奶牛去都市观光。在落日的余晖里,他们看到了一幢接一幢的摩天高楼的轮廓在地平线 上形成美丽的图案。以地平线为 X 轴,每幢高楼的轮廓是一个位于地平线上的矩形,彼此间可能有 重叠的部分。奶牛一共看到了 N 幢高楼,第 i 幢楼的高度是 Hi,两条边界轮廓在地平线上的坐标是 Ai 到 Bi。请帮助奶牛们计算一下,所有摩天高楼的轮廓覆盖的总面积是多少。 另一种理解方式: 有一...原创 2018-03-23 18:16:23 · 858 阅读 · 0 评论 -
XOR的艺术(线段树)
题目传送门题解比线段树2还要简单;异或的操作代码#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int maxn=1000000;const int inf=1e9...原创 2018-03-24 20:12:46 · 338 阅读 · 0 评论 -
「BZOJ2243」[SDOI2011] 染色(线段树+树链剖分)
题目传送门 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。题解这道题很好; 可以看出框架就是树链剖分,就是线段树比较复杂: 使用cl表示区间左端点的颜色,cr表示右端点的颜色,num表示区间内颜色区段的个数...原创 2018-03-31 14:10:35 · 247 阅读 · 0 评论 -
送花(权值线段树)
题目传送门题解写这道题是为了写权值线段树 看到c的范围比较小,按照C为权值建立线段树,c的值就是线段树的叶子位置; 类似于平衡树的做法,查询最左或最有的节点删除代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#inc...原创 2018-04-01 06:48:38 · 427 阅读 · 0 评论 -
[bzoj1227][SDOI2009]虔诚的墓主人(线段树/树状数组)
题目传送门题解我在考场上写的是O(nm),找到一个空地就分别取上下左右的树的数量分别为a,b,c,d,那么这块 墓地的值就是C[a][k]*C[b][k]*C[c][k]*C[d][k]; 思路是没错的,我们考虑怎么使用数据结构优化时间和空间; 首先我们把每棵树按照y为第一关键字,x为第二关键字排序。然后统计每个行和列的树的数量; 从左往右做每一列,假设我们已经找到了在同一列...原创 2018-03-26 20:32:05 · 405 阅读 · 0 评论 -
[USACO10FEB]慢下来Slowing down(线段树+dfs序)
题目传送门题解这道题还是比较好的; 我们先考虑树形成一条链的情况,那就成了单点修改 区间查询操作,都是线段树的基本操作; 那么我们就使用dfs序的方法,把它变成一条链,那么某棵子树的区间就是 dfn[i]+tot[i]-1,进行区间修改,单点查询; 通过dfs序,我们实现了从二维降到一维,类似“索引表”的思想,大家可以去看看这道题—海港代码#include &...原创 2018-03-28 09:03:33 · 228 阅读 · 0 评论 -
「BZOJ1878」[SDOI2009] HH的项链(线段树)
题目传送门题解这种统计种类(颜色)的问题总是很恶心;%%%REfun 首先对于所有询问的区间,按照右端点排序; 我们动态维护一棵线段树;从左到右枚举每个点,枚举到一个点: 1 、我们就把他的位置对应的线段树里加上值: 2、同时我们记录上一个同一个颜色的位置,把这个位置在线段树中删除; 我们判断,当前枚举到的点是否是一个询问区间的右端点(这就是我们为什么按照右端点排序的原因),区间...原创 2018-04-03 22:08:56 · 565 阅读 · 0 评论 -
线段树 学习笔记
懒标记延迟标记的思想 我们的本意是希望把这种标记(如各种要维护的信息,在此称为标记)全部打在叶结点上,这样查询起来就会很轻松。 但是,如果每次维护都将这种标记真实地打在叶结点上,则显然与我们使用线段树的初衷是相违背的,因为复杂度就退化成O(n)的了。 于是,我们还是按照最初的设计,遇到完整的区间就返回。 但是,如果在之后的维护或查询过程中,需要访问这个节点的子节点,则将这个标记下放,传...原创 2018-02-12 14:00:54 · 289 阅读 · 0 评论 -
[SLYZ]20180310省选hu测D1
出题人:翔哥题目背景当年还在OI 赛场驰骋的他,就被称为老师,如今他已经成为了名教练。为了促进偏远地区OI 的发展,S 老师走入山区开始了他的支教生活。 1、收集树叶 (collect.pas/c/cpp)题目描述从山顶到山脚沿着一条线种植了 n 棵老树,有法桐、珙桐、Wu桐、SW 桐。秋天到了,这些 tree 开始掉 leaves ...原创 2018-03-10 19:51:30 · 327 阅读 · 0 评论 -
[bzoj5039] [Jsoi2014]序列维护
题目传送门代码#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define ll long longusing namespace std;const int maxn=1e5+10;ll n,m,p,a[maxn<&...原创 2018-03-09 19:46:06 · 225 阅读 · 0 评论 -
可持久化线段树_学习笔记
什么是可持久化线段树?主席树最大的特点是:可以访问历史版本。例如,我对线段树进行了1000次修改操作,突然问你第233次修改之后某个区间的区间和是多少——这个问题可持久化线段树就可以正常地回答出来。这个性质有许多奇妙的应用。权值线段树 例:如果要求14159区间内排名为k的数 简化一下,从一开始首先建立一个空树 开一个数组:root[i]表示前i个位置,这些数所组成的...原创 2018-02-12 21:34:10 · 285 阅读 · 0 评论 -
[BZOJ1513]Tet-Tetris 3D(二维线段树+标记永久化)20180305 T3
题目传送门 题解题目大意:在一个矩形内选取最大值,然后把这个矩形区间内的数都变成最大值+w,询问多次操作后整个区间的最大值 考场上很容易想到二维线段树; 但在这里我对标记永久化的理解也不多,在下面的代码中,v和tag分别表示由子节点求出的最大值和完全覆盖该区间的最大值,程序实现上v和tag并不是同时更新的。代码看了黄学长的写的 #include<cstdio&g...原创 2018-03-07 13:36:49 · 357 阅读 · 0 评论 -
[USACO5.5]矩形周长求和(扫描线)20180305 T2
题目传送门 说n个矩形放在桌面上,矩形的边都是平行或垂直坐标轴的,矩形之间可以互相遮盖,求组成的新图形的周长(外围和内部形成的空洞都需要计算),每个矩形会给出左下角和右上角的坐标。如下图 需要计算周长的线条如下 输入 第一行,一个整数n(n<=5000) 接下来n行,每行四个整数分别表示每个矩形的左下角和右上角坐标,坐标绝对值不超过10000 并且保证每个矩形面积大于...原创 2018-03-07 18:52:01 · 535 阅读 · 0 评论 -
luoguP1502 窗口的星星(扫描线)20180305 T1
题目传送门 假定天空是一个平面,每个星星都有一个坐标(x,y),每颗星星都有一个亮度C,代表它的亮度。窗户是长方形的,有固定的长和宽,边平行于x轴和y轴。你的任务是告诉我如何摆放窗户,才能获得在窗口内所有星星的亮度总和最大值。注意,边框的星星不算。窗口可以被平移,但不允许旋转。 输入 在输入中有几个测试用例。每一行的第一行包含3个整数:n,w,h,表示星形的数目,矩形窗口的水平长度和垂直...原创 2018-03-07 18:58:46 · 1055 阅读 · 0 评论 -
[poj2155]Matrix(线段树套线段树)
题目传送门 题目描述: 给出一个N*N的矩阵A, 它的元素都是0或1,A[i,j]表示第i行第j列的数字。开始时,A[i,j]均为0(1<=i,j<=N)。我们可以对它进行以下两种操作: 1.C x1 y1 x2 y2(1<=x1<=x2<=N,1<=y1<=y2<=N)改变以(x1,y1)为左上角,(x2,y2)为右下角的矩形内所有元...原创 2018-02-28 07:08:14 · 460 阅读 · 1 评论 -
[ZJOI2008]树的统计(树链剖分+线段树)
题目传送门题解板子题代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000005;int n,m,x,y,a[maxn],sum[maxn<<2],add[maxn<<...原创 2018-02-28 13:29:38 · 231 阅读 · 0 评论 -
[bzoj4034][HAOI2015]树上操作(树链剖分+线段树)
题目传送门 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和题解模板题代码#include<cstdio>#include<cstring>#include<algorithm>using namespace...原创 2018-02-28 16:15:38 · 250 阅读 · 0 评论 -
[poj1151]Atlantis矩形面积求交(扫描线+线段树)
题目传送门题解扫描线段的经典题:矩形面积求交 摘自最好的线段树总结 考虑下图中的四个矩形: 观察第三个图: 扫描线的思路:使用一条垂直于X轴的直线,从左到右来扫描这个图形,明显,只有在碰到矩形的左边界或者右边界的时候, 这个线段所扫描到的情况才会改变,所以把所有矩形的入边,出边按X值排序。然后根据X值从小到大去处理,就可以 用线段树来维护扫描到的情况。如上图,...原创 2018-02-28 16:29:56 · 1020 阅读 · 0 评论 -
[SLYZ寒假测试]2018.3.1
T1草地排水sb的最大流T2noi2015软件包管理器传送门 这道题有5个同学A了这道题,不算是很难的。然而我就在考场上打暴力。 这题可以说是链剖的裸体了。并且运用了差分的思想 首先软件存在权值为1,不存在权值为0. - install操作 查询x到根节点的路径权值和,然后与x的deep做差,之后把点的权值都修改成1 - uninstall操作 查询以x为根的子树...原创 2018-03-01 17:32:44 · 264 阅读 · 0 评论 -
[BZOJ3064]Tyvj 1518 CPU监控(线段树+可持久化)
题目传送门 题解据ddd说非常的恶心,于是找来做,最后之后抄题解才能调对 线段树需要维护许多值:当前最大值,当前加法标记,当前覆盖标记 历史最大值,历史最大的加法标记,历史覆盖标记。 pushdown函数比较长,其他的还好搞。 - 历史最大值:考虑这个区间的历史加法和历史覆盖,以及子树的当前最大值 - 历史加法:考虑这个区间的历史加法和子树的当前加法 - 历史覆...原创 2018-03-09 17:50:46 · 374 阅读 · 0 评论 -
「BZOJ1012」[JSOI2008] 最大数(线段树/单调栈)
题目传送门题解写线段树的话太裸了,但是题意非常难搞,认真读题:其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。–>重新赋值从题解上看到一种单调栈的写法觉得非常巧妙 利用了题目的特性:每次都是在最后询问,用单调栈维护,开两个栈一个保存下标,一个保存他的值,在插入的时候把栈中比这个值小的都弹...原创 2018-04-03 22:15:43 · 287 阅读 · 0 评论