
线段树
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
蓝雨
题目大意一个长度为nnn的序列,每个元素都是[1,n][1,n][1,n]。 一个区间代表的序列是将其元素排序。 现在求出区间代表序列字典序按高到低排名在区间[p,q][p,q][p,q]的区间。 q-p<=100000。做法我们如何快速比较两个区间代表序列的字典序? 主席树维护区间哈希即可。 那么只要我知道第p个,可以用经典做法推到第q个。 关键是第p个。 考虑逐...原创 2018-06-25 17:18:26 · 1136 阅读 · 0 评论 -
[bzoj4881]线段游戏
题目描述quailty和tangjz正在玩一个关于线段的游戏。在平面上有n条线段,编号依次为1到n。其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,…,p_n构成了1到n的一个排列。quailty先手,他可以选择一些互不相交 的线段,将它们拿走,当然他也可以一条线段也不选。然后tangjz必须拿走所有剩下的线段,若有两条线段相交, 那么他就输了,否则他就赢了。原创 2017-05-20 09:02:28 · 945 阅读 · 0 评论 -
[bzoj3711]Druzyny
题目描述体育课上,n个小朋友排成一行(从1到n编号),老师想把他们分成若干组,每一组都包含编号连续的一段小朋友,每个小朋友属于且仅属于一个组。 第i个小朋友希望它所在的组的人数不多于d[i],不少于c[i],否则他就会不满意。 在所有小朋友都满意的前提下,求可以分成的组的数目的最大值,以及有多少种分组方案能达到最大值。神题我们考虑DP。 f[i]表示将前i个人分组的最大值,-1表示不可能,g[原创 2017-05-26 16:55:35 · 945 阅读 · 0 评论 -
[bzoj4860]树的难题
题目大意点分治点剖。 每颗子树按最上面那条边的颜色排序。 顺序扫,同颜色的用一颗线段树,其他也用一颗线段树。 每扫过一个颜色合并一下两颗线段树。 这个方法比单调队列不知道低到哪里去了。#include<cstdio>#include<algorithm>#define max(a,b) (a>b?a:b)#define fo(i,a,b) for(i=a;i<=b;i++)using原创 2017-04-21 15:04:31 · 1534 阅读 · 2 评论 -
查询
题目描述给出若干条线段,用(x1,y1),(x2,y2)表示其两端点坐标,现在要求支持两种操作: 0 x1 y1 x2 y2 表示加入一条新的线段,(x1,y1)-(x2,y2) 1 x0 询问所有线段中,x坐标在x0处的最高点的y坐标是什么,如果对应位置没有线段,则输出0。分治考虑CDQ分治,问题转化为先做0操作再做1操作。 按照横坐标建线段树,在一个线段树节点上线段可当直线用。 维护原创 2017-04-06 09:34:32 · 483 阅读 · 0 评论 -
腐女的生日
题目描述腐女要过生日了,pty 想给腐女送礼物,但是腐女所在的教室离pty 的教室太远了,于是pty就拜托会动归和A星的djy帮忙送礼物。djy在学校建立了一个平面直角坐标系,他站在了(0,0)点,腐女在(x0,y0)点,djy每次只能往上下左右四个方向移动一步,中间有n栋矩形教学楼,每个教学楼给出两个对角的坐标,并且保证每栋教学楼的周围区域(如图所示)不会有别的教学楼,即djy可以绕一个教学楼走不原创 2017-04-12 22:40:00 · 582 阅读 · 0 评论 -
[bzoj3073]Journeys
题目描述Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路。N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a<=x<=b,c<=y<=d,那么在xy之间建造一条道路。Seter保证一条道路不会修建两次,也保证不会有一个国家与自己之间有道路。 Seter好不容原创 2017-03-15 21:09:59 · 673 阅读 · 0 评论 -
[bzoj2138]stone
题目描述话说Nan在海边等人,预计还要等上M分钟。为了打发时间,他玩起了石子。 Nan搬来了N堆石子,编号为1到N,每堆包含Ai颗石子。每1分钟,Nan会在编号在[Li,Ri]之间的石堆中挑出任意Ki颗扔向大海(好疼的玩法),如果[Li,Ri]剩下石子不够Ki颗,则取尽量地多。为了保留扔石子的新鲜感,Nan保证任意两个区间[Li,Ri]和[Lj,Rj] ,不会存在Li<=Lj & Rj<=Ri的情况原创 2017-03-24 22:27:20 · 1495 阅读 · 0 评论 -
[51nod1558][CF468D]树中的配对
题目大意一颗n个节点的树,边有边权。 求一个字典序最小的排列p 使得∑dis(i,pi)\sum dis(i,pi)最小思考∑dis(i,pi)=∑depi+deppi−2∗deplca(i,pi)=2∗∑depi−2∗∑deplca(i,pi)\sum dis(i,pi)=\sum dep_i+dep_pi-2*dep_{lca(i,pi)}=2*\sum dep_i-2*\sum dep_{原创 2017-03-22 16:48:09 · 1168 阅读 · 1 评论 -
[CF671D]Roads in Yusland
题目大意一颗n个节点的树所有边都坏掉了。 请m个工人修路,每个工人都可以修一条树链ui到vi,费用为ci。 求最小修路费用,无法全部修复输出-1。DP我们来设f[i]表示i子树全都修好(包括i到父亲那条边)的最小费用。 怎么转移呢? 比如有一个能修i到其父亲边的工人j,费用是这个工人的费用+其他杂七杂八的子树的f值和。 用线段树来维护,大概是这样吧QAQ贪心我们来看看一个强做法! 首先可原创 2017-03-07 17:16:40 · 1070 阅读 · 0 评论 -
[CF765F]Souvenirs
题目大意给定一个序列 多次询问一个区间最接近两个数的差值 最接近的两个数可以相同,但不能是同一个位置上的数。 允许离线强大线段树做法我们首先可以扫描线 从左到右扫,每次处理右端点在扫描线上的所有询问。 我们维护一颗线段树,线段树每个节点的值没有太多实际的意义,但它需要满足一个性质: 假如当前扫描线在now,那么在线段树中查询[l,now]这个区间的答案就是正确的答案 听起来很不可思议?原创 2017-02-23 17:18:25 · 1593 阅读 · 0 评论 -
[UOJ#228]基础数据结构练习题
题目大意维护一个序列,支持三种操作 1、区间加法 2、区间开方下取整 3、查询区间和线段树有一道bzoj上的名为上帝造题的七分钟的题目没有加法操作。 有了我们怎么做呢? 假设一个区间所有数都相同,显然对它开方就是一个赋值标记嘛。 存在不同呢? 对于两个数a和b设a大于b。 原本它们的差是a-b 开方后差变成了a√−b√=a−ba√+b√\sqrt a-\sqrt b=\frac{a原创 2017-02-22 15:11:09 · 666 阅读 · 0 评论 -
[bzoj4698][SDOI2008]Sandy的卡片
题目描述Sandy和Sue的热衷于收集干脆面中的卡片。然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积 攒卡片兑换超炫的人物模型。每一张卡片都由一些数字进行标记,第i张卡片的序列长度为Mi,要想兑换人物模型 ,首先必须要集够N张卡片,对于这N张卡片,如果他们都有一个相同的子串长度为k,则可以兑换一个等级为k的人 物模型。相同的定义为:两个子串长度相同且一个串的全部元素加上原创 2017-02-21 16:34:59 · 717 阅读 · 0 评论 -
[bzoj3038]上帝造题的七分钟2
题目描述XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 “第一分钟,X说,要有数列,于是便给定了一个正整数数列。 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。 第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。 第六分钟原创 2017-01-19 22:43:18 · 434 阅读 · 0 评论 -
[bzoj4722]由乃
题目描述由于一周目的由乃穿越到了三周目,并带来了巨大的影响,改变了三周目所有未来日记所有者的命运所以三周目的 神Deus准备不利用未来日记来决定把神的位置交给谁Deus特别崇拜某知名社会主义国家领导人,因为他的寿命比神 还长,所以他想钦定下一个卡密,而不通过选举他决定钦定三周目的由乃成为卡密,去和一周目的雪辉重逢(终于 做了一件好事了)但是,既然是钦定,那么肯定还是要做做样子的,以防某些来自香原创 2017-01-14 22:04:16 · 1207 阅读 · 1 评论 -
[bzoj4658]rescue
题目描述wyh8000很喜欢看书,特别是那种很容易死脑细胞的书。 wyh8000看书喜欢从第K页开始看起,然后看到第M页,但是wvh8000并不是有耐心的小盆友,他 只想快点完成看书任务,然后就可以去愉快的农别人了,于是他经常跳着看,但是他一次最多跳D页, 然后阅读那一页的内容,然后死掉A的脑细胞。当然如果那一页的内容他比较感兴趣,又会回复一定 的脑细胞。 好心的学长不希望看到wyh800原创 2017-01-16 10:34:44 · 630 阅读 · 0 评论 -
保卫艾尔
题目描述凯莱克斯研制出的新防御矩阵系统的建立方式是这样的:他用艾尔上的 n座水晶塔为基础建立多层防御矩阵,如果将艾尔视为一个 直角坐标系,则每座水晶塔都有一个坐标(xi,yi) 。 一层防御矩阵是一个四边形,四边形的四个顶点都是一座水晶塔,而且四边形两条对角线分别平行于x 轴和y 轴。两条对角线的交 点为防御矩阵的中心。中心必须位于防御矩阵的内部,同时也不能位于四边形的边上(即该四边形是原创 2017-01-14 22:34:23 · 407 阅读 · 0 评论 -
三部曲
题目大意对一颗n个节点的树操作。 有两种操作,第一种是对子树j,j的点权+k,j的儿子们点权+k+1,j的孙子们点权+k+2,以此类推。 第二种操作询问子树点权和。线段树修改操作实际上是对子树每个点i加上k-d[j]+d[i] 标记可以写成(a,b)表示一个点权为x的点i经过后变成x+a+d[i]*b 显然这个标记可合并而且容易求和。 线段树维护即可。#include<cstdio>#i原创 2016-11-15 15:28:32 · 524 阅读 · 0 评论 -
[bzoj4835]遗忘之树
题目描述定义任意两点之间存在唯一路径的无向图是树。对于一棵n个点的树,如果删掉某个点u之后每个连通块的大小均不 超过n/2,那么称u为这棵树的重心。现在有一棵n个点的树T,利用过程P来构造一个n个点的有向图G,初始G没有边 。现在对T调用过程P,P的内容如下: 1:删去u,对每个连通块递归调用过程P; 2:对每个连通块,如果它的标号最小的重心为v,那么在图G中连一条u到v的有向边。 3:现原创 2017-05-20 09:06:59 · 489 阅读 · 0 评论 -
[LibreOJ β Round]ZQC的课堂
题目描述https://www.loj.ac/problem/503题解x和y是可以分开考虑的。 设si表示某维坐标的前缀和。 要求统计多少i满足si*si-1<=0(此时会有正负交替)。 我们发现这个条件等价于max(si,si-1)>=0且min(si,si-1)<=0。 这样两个限制依然不好统计。 改成用n减去不满足条件的。 1、max(si,si-1)<=0 2、min(si,原创 2017-06-19 16:36:53 · 791 阅读 · 0 评论 -
归并排序
题目大意给一个长度为2的次幂的排列做归并排序,在区间长度为2时比较器会变成随机返回值。 多次操作,每次要么交换两个位置,要么询问归并排序后第x个位置等于排序前第y个位置的概率。做法容易发现,如果x#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=原创 2017-06-28 20:57:30 · 478 阅读 · 0 评论 -
青青草原播种计划
题目大意有nnn个可重集,支持下列操作: 往某个集合加入某个数。 让某个集合删除某个数。 将一个集合的所有数放入另一个集合中(然后该集合就空了)。 询问一个集合的mex以及最小的xxx使得xxx无法表示成子集和。 对于历史版本进行询问。 强制在线。做法1是加入,2是删除,3是合并。 值域线段树都能支持。 mex用值域线段树做。 第二个的话,可以考虑把值从小到大排序,如...原创 2018-05-30 08:49:33 · 11626 阅读 · 0 评论 -
Zkb
题目大意区间排序,区间求乘积十进制下的最高位。做法先转化询问。 对所有数取log10log10log_{10}。 那么乘法转化为加法。 设取logloglog后和为xxx,答案显然是⌊10x−⌊x⌋⌋⌊10x−⌊x⌋⌋\lfloor10^{x-\lfloor x\rfloor}\rfloor。 现在问题就是,区间排序,区间求和,怎么做? 可以维护若干个排序块,这个可以用平衡树...原创 2018-03-28 07:56:12 · 720 阅读 · 0 评论 -
树
题目大意一颗点权树,有多少种将树划分成若干条路径的方法,使得每条路径点权和非负?做法不妨设f[i]表示i子树里全部成功覆盖方案数,g[i]表示i子树里除了i全部成功覆盖方案数。 g就是各个子树的f乘积。 f可以枚举lca穿过当前点的一条路径,设为j->k,那么j和k都贡献g,其余挂着的子树贡献f,乘起来即可。 这样太慢了。 考虑简单问题。 如果路径是j->i怎么做呢? 可以尝试对每个子树原创 2017-11-23 15:21:30 · 637 阅读 · 0 评论 -
[arc069f]Flags
题目大意n个变量xix_i,每个变量等于aia_i或bib_i。 选择一种赋值方案,使得min(|xi−xj|)min(|x_i-x_j|)最大。二分答案二分答案后转化为2-sat问题,线段树优化连边即可。 (注意不能够自己连自己的另一半)#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using原创 2017-11-14 11:54:18 · 840 阅读 · 0 评论 -
[arc073f]Many Move
题目大意你有两个整数a和b。 现在n个操作,依次执行,每次给你xi,你选择一个整数y变成xi,代价为|xi-y|。 求做完所有操作的最小代价。做法设f[i]表示做完前i个操作,其中一个整数变成xix_i,另一个变成xi−1x_{i-1}的最小代价。 第一次操作枚举是哪个变成x[1]做两次dp,以a为例,那么f[1]=|a-x[1]|,然后x[0]=b,即为初值。 转移是f[i]=min(f[原创 2017-11-14 11:50:52 · 803 阅读 · 0 评论 -
[arc076f]Exhausted?
前言你们都会hall定理推广版本。 但是我没用hall定理做啊。题目大意一个二分图,X部每个点i连了Y部的[1,Li]和[Ri,m]。 求n-最大匹配。做法考虑到二分图最大匹配等于最小覆盖。 最优方案小我们一定是选择了Y部的一个前缀和一个后缀,剩余不能因此得到覆盖的X部点要选上。 假如我们枚举选了Y部的前缀l,假设Y部选的后缀是r,那么选的点为l+m−r+1+n−∑ni=1[Li<=l]∗[原创 2017-11-02 17:37:12 · 755 阅读 · 0 评论 -
[agc006e]Rotate 3x3
前言结论题。题目大意不想讲。做法不想说。 推荐在网上搜索其他题解或看官方题解。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int tree[maxn],a[maxn][3]原创 2017-11-01 14:53:47 · 951 阅读 · 3 评论 -
[agc015e]Mr.Aoki Incubator
前言看错题好久,怨念极深。 主要就是推染红的条件。 将速度排序是关键。 然而本题最重要的是证明区间不包含,然后做法可以很显然的得到。题意数轴上许多黑点,每个点都有一个方向向右的正速度。 当两个点在同一个位置上重合时,若其中一个是红色,另一个也变成红色。 保证没有相同速度或初始坐标。 现问你有多少方法染红一些点,使得无穷久后所有点都被染红。做法观察一个点i染红后,哪些点j会被染红? 1、原创 2017-09-28 22:30:38 · 989 阅读 · 0 评论 -
Sequence
题目大意有两个序列a和b。 每次询问将一个区间a值排名在[x,y]的中找一个b值第k小。做法用主席树将排名的x和y变成具体的值。 接下来可以根据b整体二分,其余部分可以拆区间+扫描线+数据结构完成。#pragma GCC optimize(2)#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)usi原创 2017-08-17 19:20:58 · 473 阅读 · 0 评论 -
果树
题目大意问一棵树上有多少条路径不包含同色点。 一种颜色最多20个点。瞎做对于同色点提取出来两两形成一个约束。 这样约束只有n*20个。 因为最坏情况是每种颜色都出现20次。 那么n/20*20^2=n*20。 接下来变成了owaski的那道A,可以在本博客内搜索。#include<cstdio>#include<algorithm>#include<cmath>#define fo(原创 2017-07-07 16:52:36 · 412 阅读 · 0 评论 -
Fiend
题目大意满足li<=pi<=ri的排列p,问逆序对是奇数的多还是逆序对是偶数的多或者是否一样多?解法可以构造一个矩阵,ai,li~ri是1,然后就是问它行列式的符号或判断行列式是否为0。 模拟高斯消元,每次消到第i行时,让第i行变成第i列上有1且r最小的,这样可以保证任意时刻1都是一段区间。 可以用可并堆、平衡树或线段树来快速支持合并。#include<cstdio>#include<algo原创 2017-07-07 16:43:43 · 611 阅读 · 0 评论 -
港湾
题目描述放假啦! 小林和康娜来到了港口,看到有货船正在卸货。 港口十分狭窄,只有两个卸货区可以使用。每个卸货区上面可以堆积任意多个箱子。 每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货区的顶端。之后,当车辆来运走这个箱子的时候,也必须保证这个箱子在某个卸货区的顶端。 港口今天一共运来了N个箱子,第i个箱子在时刻Ai被卸货,在时刻Bi被取走。康娜发现,每个箱子被取走时,都恰好位于所在卸货原创 2017-06-15 15:05:17 · 561 阅读 · 0 评论 -
[JZOJ100019]A
题目大意求一颗树有多少条不同的路径,使得路径长度>1且不存在j!=k满足j是k倍数。瞎做有n log n个限制某两个点不能出现在一条路径中。 可以转化成某个区间的起点不能以某个区间为终点。 然后扫描线用线段树维护。 这个是既包含插入又包含删除的覆盖问题。 因为操作具体对称性所以可以标记可持久化。#include<cstdio>#include<algorithm>#include<cma原创 2017-06-26 16:08:40 · 459 阅读 · 0 评论 -
[HAOI2017]供给侧改革
题目描述做法lcp长度不超过t,这个概率为1-(1-1/2^t)^(n^2)。 t可以取40。 离线扫描,把询问挂在右端点。 每一个位置把从它开始后长度为40的字符串丢入trie中。 可以在trie的每一个结点保留当前子树中位置最大的两个。 然后可以线段树维护一发。 每次区间max标记可以考虑暴力,均摊复杂度是对的。 你可能不知道我在说什么因为我说的很不详细。#include<cstd原创 2017-06-10 17:22:57 · 1016 阅读 · 0 评论 -
排序列表
题目大意有若干个区间,C(m)表示所有包含m这个点的区间编号排序后的序列。 求本质不同的非空字典序第k小的序列。做法先离散化,因为本质不同不会超过2n个序列。 接下来顺序扫,并维护每个位置的hash值。 遇到之前出现过的hash值就叉掉。 然后接下来枚举按字典序枚举,每次看看往字典序末尾加入i会有多少种可能。 对于k,如果它不在答案序列中,不能选择它区间所包含的m。 对于k,如果它在答案原创 2017-07-11 14:23:06 · 450 阅读 · 0 评论 -
装箱
题目大意n个箱子,每个都有三个属性(a,b,c),可以任意调换属性顺序。 一段区间的价值定义为任意调换后max(a)*max(b)*max(c)的最小值。 求所有区间价值和。结论把所有箱子的三个属性按降序排列,一定最优。 考虑找到了全局最大值mx,把mx调到第一维,接下来第一维答案一定是mx,而其他箱子也一定会将自己的最大值调到第一维,第二维也同理。瞎做对三维维护单调栈。 维护线段树,位置l原创 2017-07-11 14:16:34 · 399 阅读 · 0 评论 -
[LibreOJ β Round]ZQC的手办
题目大意区间对一个数取max。 区间求最小的x个比k小的数。线段树第一个操作很好搞。 第二个操作有个很显然的常数大做法。 实际上可以用堆把这个区间的笛卡尔树按优先级广搜。#include<cstdio>#include<algorithm>#include<queue>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;con原创 2017-06-19 21:08:11 · 776 阅读 · 0 评论 -
[hackerrank]Counting on a tree
题目大意给你一棵树,每个点有一个颜色 若干询问,每次询问两条树路径上,存在多少点对(i,j)满足以下条件: 1、i不等于j 2、i和j颜色相同 3、i在第一条树路径上,j在第二条树路径上第一种算法我们先将颜色离散化,然后统计每种颜色有多少个点。 先不考虑第一个限制,假设对于一种颜色c,我处理出了d数组d[x]表示x到根路径上有多少个颜色为c的,那么一个询问x->y和u->v答案为(d[x]原创 2016-11-14 17:33:15 · 678 阅读 · 0 评论 -
人生的价值
题目大意一堆二维点,有点权。 选择一个坐标建饭堂可以收获所有与其曼哈顿距离不超过m的点的点权。 求最大收获。切比雪夫距离曼哈顿距离是个菱形。 将坐标轴旋转45度,再进行放缩,转化为图像是正方形的切比雪夫距离。 然后可以经典扫描线。#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#define fo(原创 2016-11-16 20:30:53 · 434 阅读 · 0 评论