线段树
Cold_Chair
我XXX就是饿死,死外边,从这里跳下去,也不会再做你九条可怜一个测试点
展开
-
【NOI2019模拟2019.6.17】互膜
https://jzoj.net/senior/#contest/show/2775/2题目大意:给你n(偶数)n(偶数)n(偶数)张卡片,第iii张价值为s[i]s[i]s[i]一开始编号奇数的卡片属于A,偶数的属于B。一共有n−1n-1n−1轮操作,第iii轮,iii是奇数A操作,iii是偶数B操作。操作可以将第iii或i+1i+1i+1卡的所属权反转,或者不操作。两人绝顶聪明,希...原创 2019-06-17 21:38:26 · 513 阅读 · 0 评论 -
【gdsoi2018 day3】谁是冠军
题目大意:不说。题解:如果x能胜y,则x往y连一条边。如果一个点能够遍历所有的点,显然它就是可以的。用tarjan缩一下强联通分量,入度为0的那个分量就是答案。这样就有60分。用主席树优化一下连边。大概是线段树区间会下放到log个完整区间,直接往那些区间连边。那些区间往包含的点连边。注意插入有时效性,所以要用主席树的那种思想,新开点。#include<cstdio>#include<algorit原创 2018-05-08 12:18:00 · 424 阅读 · 0 评论 -
【gdoi2018 day1】涛涛接苹果
题目大意:太长了,不想写。题解:看到这个子树问题,很容易想到dfs序转区间。再写写约束,发现有三个,并且满足容斥性。于是排序搞掉一个,cdq搞掉一个,树状数组搞掉一个,贼好写。主席树,K-D Tree当然也可以,有些复杂。Code:#include<cstdio> #include<algorithm>#define low(a) ((a) & -(a))#define ll long lon原创 2018-05-07 21:56:11 · 386 阅读 · 0 评论 -
【GDOI2018Day2模拟4.21】果树(矩形覆盖问题)
Description:NiroBC 姐姐是个活泼的少女,她十分喜欢爬树,而她家门口正好有一棵果树,正好满足了她爬树的需求。 这颗果树有N个节点,节点标号 1…N。每个节点长着一个果子,第i个节点上的果子颜色为 Ci 。 NiroBC姐姐每天都要爬树,每天都要选择一条有趣的路径 (u,v) 来爬。 一条路径被称作有趣的,当且仅当这条路径上的果子的颜色互不相同。 (u,v) 和 (v,u...原创 2018-04-21 16:31:15 · 399 阅读 · 0 评论 -
【NOI2018模拟4.3】paint
Description: 1<=n<=100000题解:有一个非常易证但是不显然的结论。答案矩形一定过横轴中线或数轴中线。只考虑数轴中线先,横轴中线翻转一下再做就行了。中线把点分成了两个部分。按x排个序,x相同的只取最接近中线的一个。然后扫,建单调栈,正常的暴力的话每次查询是单调栈的长度的复杂度。但是可以离散+线段树。线段树存的是以这个坐标为左边界,往上下的最长长度,便于统计,还要减去一个横坐标。原创 2018-04-15 20:00:11 · 303 阅读 · 0 评论 -
【NOI2018模拟3.31】华胥梦天
Description: 1<=n<=500000题解:这题是吉利营员交流的一个子问题。线段树维护几个东西: 1.和 2.最大值 3.严格次大值 4.最大值个数 5.min标记可以用势能分析来分析复杂度。考虑势能为线段树每个节点所代表区间的不同数的个数和。一次修改只会增加log个。对于区间取min,假设取x的min。x>=max...原创 2018-04-02 22:12:40 · 274 阅读 · 0 评论 -
【NOI2018模拟3.10】子序列
Description:题解:好把我竟然打了lj的题解方法。代码长常数大。大概就是用个优先队列来维护。每次提出最小的。考虑两种转移: 1.在它后面加个最小的。2.把它的最后一个删掉,找个次小的。第一种转移预处理。可以用主席树来维护第二种转移。比较大小的话就用trie上倍增。Code:#pragma G++ optimize (2)#include<map>#include<queue>#in原创 2018-03-14 12:25:57 · 315 阅读 · 0 评论 -
线段树合并——bzoj 2733 [HNOI2012]永无乡
真正的线段树合并的裸题。题目大意:原题链接.每个点的有个类似分数的东西,互不相同。每次可以加一条双向边(x,y)。询问x点所在联通块第k的点。讲一讲牛逼的启发式合并。开线段树,每次做并查集合并的时候找到点数少的那一个,一个一个把点提出来,加到大的线段树里。时间复杂度O(n log^2 n)。线段树合并就不讲了,前一篇博客有讲,10^5跑了2s,常数爆炸。...原创 2018-03-23 19:41:56 · 257 阅读 · 0 评论 -
线段树合并——hdu 5709 Claris Loves Painting
前言:清冬上不会线段树合并又没想到启发式合并亏了50+……题目大意:题目链接.给出一个一棵以1为根的树。每个点有一个颜色。每次询问给出x,d,为以x为根的子树中,到x距离小于等于d的点有多少种不同的颜色。题解:感觉这题还是个线段树合并的裸题吧(也没有这么裸)。先谈谈自己对线段树合并的感受。线段树应该都得是动态开点的线段树,不然合并不就是O(n)的吗?给出原创 2018-03-23 19:09:16 · 608 阅读 · 0 评论 -
【GDOI2015模拟12.21】鸡腿の乒乓
Description:乒乓游戏可不是乒乓!乒乓好像也和这个游戏没啥关系。这个游戏的主角就是——区间。对于两个区间,如果(a,b)和(c,d)区间满足c<a<dc<a<dcc<b<dc<b<dc...原创 2018-07-12 19:49:25 · 302 阅读 · 0 评论 -
2018清华集训(YL联考)9.9 T2 triangle
题目大意:以下所有的东西都在第一象限。给出n个点,和m个以原点为顶点的三角形,对每一个三角形询问是否有点在三角形内。1 &amp;lt;= n &amp;lt;= 100000题解:把三角形看成原点出去的两个向量。首先一个点要在三角形内,一定要在这两个向量的夹角间,并且要在三角形另外两个顶点形成的直线下。第一个限制非常好搞,只需要把所有点极角排序,那么合法的点就在一个区间内了。对于...原创 2018-09-12 22:07:17 · 213 阅读 · 0 评论 -
Codeforces 983E NN country
传送门先考虑树是一条链怎么做?最最最最经典的做法就是倍增。设fi,xf_{i,x}fi,x表示从x出发,用2^i的条路径,最远能够走到哪里。首先预处理f0,xf_{0,x}f0,x,这个相当于把一段区间的f取max。假设有一路径[x…y],那么要对[x…y]的f取max(fi,y)max(f_i,y)max(fi,y),但是由于fif_{i}fi的初值为i,所以也可以说是对[x…...原创 2018-10-20 16:36:44 · 404 阅读 · 0 评论 -
【NOI2019模拟2019.6.17】可爱
https://jzoj.net/senior/#contest/show/2775/1题目大意:给一个长度为n的字符串。对每一个长度为m的子串,求其它长度为m的子串有多少个和它最多有一位不同。1<=m<=n<=1000001<=m<=n<=1000001<=m<=n<=100000题解...原创 2019-06-17 21:32:16 · 364 阅读 · 0 评论 -
JZOJ 6188【NOI2019模拟2019.5.30】Duliu
1<=n,m<=3e5题解:O(nlog2n)O(n log^2 n)O(nlog2n)的方法很好想。一个log主要是找性质。首先思考一个区间[l,r]如果a[l-1]<=max(l,r),则可以扩展到[l-1,r]右端同理这样的话有用的区间就被缩成了O(n)个,就是每个点开始往左往右一直走直到大于,也就是笛卡尔树。现在假设查询[l,r]考虑分成三种区间。1...原创 2019-05-30 20:12:59 · 312 阅读 · 0 评论 -
【NOI2018】你的名字
题目大意:一开始给出字符串S。Q次询问,每次给出l,r和字符串T。问T有多少不同子串不是S[l…r]的子串。∑∣T∣&lt;=1e6,∣S∣,∣T∣&lt;=5e5\sum|T|&lt;=1e6,|S|,|T|&lt;=5e5∑∣T∣<=1e6,∣S∣,∣T∣<=5e5题解:不同子串一类问题优先考虑SAM。感觉这题考的更多是对SAM的理解。...原创 2019-03-04 16:43:47 · 939 阅读 · 0 评论 -
【GDOI2019模拟2019.2.23】字符串
Description:题解:首先思考一个经典的问题怎么做?就是求一个串的子串的不同子串数,这玩意儿冬令营上《字符串前沿算法》讲过。考虑在把整个串的SAM建出来,注意建的时候记录每个结尾点。然后一个一个把结尾点激活,之所以要先建出来的原因是树的形态就稳固了。假设要查询[l…r]的不同子串数,先把r以前的结尾点激活。如果知道每个点的rmax,这个点的深度代表的是[x…y],那么就给...原创 2019-02-24 22:35:54 · 298 阅读 · 0 评论 -
CodeForces 1110 F Nearest Leaf
传送门.翻译:给出一棵带权树,树的dfs序是确定的。每次询问给出x,l,r,问dfs序属于[l…r]的叶子点到x最近的距离是多少。题解:不难想到一个暴力的做法:每次x往父亲跳,查询其它子树里的叶子节点。复杂度O(n2)O(n^2)O(n2)可以强行套上树链剖分搞这个,时间复杂度为(nlog2n)(n log^2n)(nlog2n),空间复杂度通过离线询问可以达到O(nlogn)O(...原创 2019-02-22 21:13:09 · 167 阅读 · 0 评论 -
Codeforces 1087F Rock-Paper-Scissors Champion
传送门。题解:比赛要回宿舍去睡觉没时间做了。GD选手表示只会强行数据结构。首先先来猜一下结论。对一个人,左右分开考虑,只有都能赢,才能赢。一边能赢的条件是,要么不存在克制它的,要么存在克制它的同时存在它克制的。这个是很显然的。既然带修,强行套上一个线段树,对于线段树的每个区间维护f[l][r]表示左边传过来的状态是l,右边传过来的状态是r,这个区间有多少个可行的,状态是二进制状态,...原创 2018-12-25 21:46:37 · 297 阅读 · 0 评论 -
动态dp学习小记
据说这东西猫锟在WC2018讲过,怎么一点印象都没有呢?当时应该是在冬眠NOIP2018T6如果用动态dp去看就是一道裸题,不过因为询问是相互独立的,即修改没有时效性,可以直接用倍增代替动态dp。先看一道题:P4719 【模板】动态dp如果没有修改,这题就是树形dp入门题:没有上司的晚会设f(x,0/1)f(x,0/1)f(x,0/1)分别表示以x为根的子树中,选x的最大独立集,不选x...原创 2018-11-20 22:46:41 · 383 阅读 · 0 评论 -
【GDOI2016模拟3.14】hashit
CLJ的题,本来是道后缀平衡树的裸题,先用广义后缀自动机艹过去,之后再补。题目大意:有一个字符串,每次要支持后端插入和后端删除,问操作完后该串不同子串的个数。题解:首先搞成一个trie,然后建广义SAM。然后考虑利用SAM去求不同子串个数。我们知道对于两个trie的两个前缀,它们的lcs就等于它们两个点在SAM上的结尾点在SAM上的lca的深度。因此可以自上而下扫trie,现在相当于...原创 2018-10-24 22:16:18 · 235 阅读 · 0 评论 -
【2012中山市选】最大立方体空间(二维线段树)
Description:给出一个长方体的箱子,还有在箱子里面的N个长方体的盒子,箱子和盒子的各个边都是平行于某个三维坐标轴。现在要求你找出其中最大的立方体空间,输出它的长度。首先这个空间必须位于箱子里面,而且不能与其它的盒子占的空间冲突。这个空间也必须是各边平行于某个坐标轴。0<=N<=10000<=xi<=Xi<=L<=10000<=yi<=Yi<=W<=10000<=zi<=Zi<=H<=100原创 2018-01-20 22:30:13 · 468 阅读 · 0 评论 -
【TJOI2013】单词
Description:小张最近在忙毕业设计,所以一直在读论文。一篇论文是由许多单词组成的。 但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次。 单词数不超过200 单词总长度不超过1000000题解:这题我能想到的做法有三个。第一个是最朴素的AC自动机。我们需要清楚知道AC自动机的fail链的定义:走到x所代表的字符串有出现的最长的一个后缀。在原trie上往子原创 2018-01-19 21:09:18 · 429 阅读 · 0 评论 -
【NOI2014模拟】数列
Description:给定一个长度为n的正整数数列a[i]。定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|。你需要写一个程序支持2种操作(k都是正整数):Modify x k:将第x个数的值修改为k。Query x k:询问有几个i满足f(x,i)<=k。询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的原创 2018-01-23 15:12:12 · 1004 阅读 · 0 评论 -
【GDOI2018模拟9.14】通信
Description: 1<=n<=10510^5题解:比赛没有仔细想,码了个n2n^2暴力,结果还被卡常了。 暴力思路如下: 先枚举根为x,依次加入x+1,x+2,x+3……,加入一个点y(y>x)时,如果它的子树中没有已经加入的点,那么它就会使距离增大,再暴力往上跳,给它的祖先打上标记,直到到某个点,这个点已经被打上标记就可以停止了,同时可以算出增加的距离。 感觉这个思路很想GDOI-原创 2017-09-18 19:23:59 · 510 阅读 · 0 评论 -
【GDOI2018模拟9.23】动态图
Description: 1<=n<=10^6,1<=q<=200000题解:暴力可以用按秩合并并查集,这个数据结构支持删除。对于正解,我们需要把l->r条边一次加进并查集,对于每一条边,它有贡献,就是加入它的时候,它会合并两个不同的集合。 反过来,它没有贡献,就是它所连着的两端本来就在一个集合里。假设我们按1->r的顺序加入每一条边,当加入一条边时,设它是x,y,设z为x到y的路径上编号最小的原创 2017-09-26 12:07:33 · 561 阅读 · 0 评论 -
【NOIP2017模拟A组模拟8.5】带权排序
Description: n<=105,0<=li<=ri<=109,0<=si<=109n<=10^5,0<=li<=ri<=10^9,0<=si<=10^9题解:E[f(i)] = ∑ri=lsi∗E[pi]\sum_{i = l}^r s_i * E[p_i] 正着考虑是不太容易的原创 2017-08-05 21:28:53 · 595 阅读 · 0 评论 -
【NOIP2017提高A组模拟7.13】好数
题目大意:我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1.这个数是0或1 2.所有小于这个数且与它互质的正整数可以排成一个等差数列例如,8就是一个好数,因为1,3,5,7排成了等差数列。 给出N个非负整数,然后进行如下三个操作: 1.询问区间[L,R]有多少个好数 2.将区间[L,R]内所有数对S取余(S≤1000000) 3.将第C个数更改为X 题解:首先我们打个表原创 2017-07-13 20:04:04 · 681 阅读 · 2 评论 -
JZOJ 100036 【NOIP2017提高A组模拟7.10】随机
题目大意: 1<=n<=10610^6题解:Ans=min(max(|ai−aj|,j−i+1))Ans = min(max(|a_i - a_j|, j - i + 1)) 假设我们现在的区间长度是m,最小值是min,将右端点右移,m++,min将可能会减小。 我们确定一个左端点l,假设右端点是r,那么一定当r位于m>=min的临界点上max(m, min)菜会最小。 证明:假设现在在临界原创 2017-07-10 19:49:17 · 608 阅读 · 0 评论 -
JZOJ 100019【NOI2017模拟6.26】A
题目大意: 1<=n<=10^5题解:假设有两点u,v其中v = i *u(2<=i<=n/u) 如果有一路径a,b经过了它们两,那么a,b就是不合法的路径。我们可以尝试找出这样的路径。先求出树的dfs序,设为dfn[x] end[x]为x的子树中最大的dfn[x’]使dfn[u] < dfn[v]:1.u是v的祖先:设g为u到v的路径中距离u最近的那个点。 则跨过u,v的路径a,b(dfn原创 2017-06-28 20:38:18 · 671 阅读 · 0 评论 -
简单树链剖分
“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。原创 2017-01-03 21:32:26 · 359 阅读 · 0 评论 -
GDKOI 2016 魔卡少女
GDKOI2016 魔卡少女 Description君君是中山大学的四年级学生。有一天在家不小心开启了放置在爸爸书房中的一本古书。于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地。这时一只看上去四不像的可爱生物“封印之兽”可鲁贝洛斯从书中钻了出来,它告诉君君书中的牌叫“库洛牌”,现在散落各地已实体化,要君君将它们全部再次封印起来,以免危害世界原创 2016-07-14 20:03:20 · 1006 阅读 · 0 评论 -
【NOIP2017提高A组集训10.28】序列操作
Description:一开始有n个非负整数hi,接下来会进行m次操作,第i次操作给出一个数c[i],要求你选出c[i]个大于零的数并将它们减去1。 问最多可以进行多少轮操作后无法操作(即没有c[i]个大于零的数) 1<=n,m<=1000000题解:对于一个数据结构学傻的人来说,一上来就会上什么平衡树之类的东西。每次去c个,显然取当前最大的c个会优。 但是你发现如果对最大的c个数-1,也许相原创 2017-10-30 19:51:04 · 438 阅读 · 0 评论 -
【WinterCamp 2013】楼房重建 && 【NOIP2017提高A组模拟10.8】God Knows
感谢czy的题解。这两题是类似的。转换以后都是这样的: 有一个序列a[1..n],每次询问对a[i-j]之间的元素做一个(递增或递减)单调栈,求单调栈里有多少个元素,或者是还有b[1..n],求做了单调栈以后,单调栈里的元素对应的b的极值。 有修改,为单点修改。做法其实本质是利用线段树的分治思想。假设建的是递减的单调栈,求单调栈里元素的个数。设query(l,r,p)表示在a[l..r]所形成的原创 2017-10-25 19:32:28 · 559 阅读 · 0 评论 -
NOIP2017 Day2_T3 列队
题目大意:众人皆知。题解:考场时打SBT打傻了,被卡爆了。这就是个傻逼线段树能过的东西,不要问我问为什么能跑这么快?每一行用线段树维护前m-1个。最后一列独立开来。查询用线段树二分。可以直接预开6e5。完。Code:#include<cstdio>#include<cstring>#include<algorithm>#define ll long long#define fo(i, x,原创 2017-11-18 16:05:45 · 1308 阅读 · 0 评论 -
【2011集训队出题】拆迁队
Description:lanxisi带领着他的拆迁队来整治一个街道。这个街道由N个旧房子组成,从左到右编号为1..N。每个旧房子i有一个正整数的美观度Ai。 lanxisi希望整个街道从左到右美观度严格递增,也就是保证AiAj(ij)Ai。但是旧的街道明显不符合这个要求,于是lanxisi希望拆迁一些旧房子并在原地建立新房子来满足这一要求。但是与很多拆迁队一样,很多钉子户拒绝拆迁。所以原创 2018-01-05 18:28:11 · 414 阅读 · 0 评论 -
【NOI2014模拟】数据
Description:为了写论文,Alex经常要整理大量的数据。 这一次,Alex面临一个严峻的考验:他需要实现一个数据结构来维护一个点集。 现在,二维平面上有N个点。Alex 需要实现以下三种操作:在点集里添加一个点;给出一个点,查询它到点集里所有点的曼哈顿距离的最小值;给出一个点,查询它到点集里所有点的曼哈顿距离的最大值。 两个点的曼哈顿距离定义为它们的横坐标差的绝对原创 2018-01-22 20:40:51 · 374 阅读 · 0 评论 -
【WC2016模拟】String
Description:题解:一眼就是在后缀树上乱搞。仔细思考可以用dsu on tree+线段树来维护,常数巨小。nilil说用后缀数组+Cdq分治+线段树。大概是这样: 对于一个区间[x..y],设m=(x+y)/2那要求跨过m的两个点的答案。可以设l,r。l往左边扫过去,得到一个到终点的height的min值。同时r往右边调。使r到m的height的min值小于等于l的。反着做一遍。r往右边原创 2017-12-30 07:13:14 · 514 阅读 · 0 评论 -
【WC2015模拟2.5】数组
题目大意:给你n个元素的颜色。 问元素的颜色互不相同的区间有多少个。 支持单点修改。 1<=n<=10^5题解:设last[i]表示i元素的颜色上一次出现的位置。 假设我们确定了区间左端点x, 右端点y要满足条件则max(last[i])<x,(i in [x..y])max(last[i])<x,(i~ in ~[x..y])再设一个p数组,p[last[i]]=i则右端点<min(p[原创 2018-01-12 18:35:49 · 285 阅读 · 0 评论 -
【NOI2011】阿狸的打字机
Description:阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有 26个小写英文字母和’B’、’P’两个字母。 经阿狸研究发现,这个打字机是这样工作的: 输入小写字母,打字机的一个凹槽中会加入这个字母(按 P 前凹槽中至少有一个字母)。 按一下印有'B'的按键,打字机凹槽中最后一个字母会消失。 按一下印有'P'的按键,打字机会在纸上打印出凹槽中现有原创 2018-01-19 21:16:58 · 329 阅读 · 0 评论 -
【GDOI2017第二轮模拟day1】公路建设(克鲁斯卡尔最小生成树+线段树+归并)
题目大意:给出n个点,m条边。 q组询问,每次询问编号在[l..r]范围的所有边做克鲁斯卡尔最小生成树的代价。1<=n<=100,1<=m<=100000,1<=q<=15000题解:n好小啊。可不可以线段树啊。套个归并就可以啊。莫队+lct可不可以啊。时间复杂度:O(αmn+α q log m n)Code:#include<cstdio>#include<cstring>#define f原创 2017-12-22 20:49:18 · 455 阅读 · 0 评论