![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
蜗角虚名羊
这个作者很懒,什么都没留下…
展开
-
POJ1177 Picture
题目 思路来自http://blog.csdn.net/littlewhite520/article/details/78091093题意:给n个矩形,求它们重叠后的周长 题解:用线段树的扫描线从下到上扫一遍,与面积并思想有些相似面积并,下面重边的处理相似,但是周长的并需要求的是竖边的个数然后乘以高度,而面积并求的是底边的长乘以高度,这里我们用了区间合并时的l和r结构体k...原创 2018-03-22 18:41:26 · 319 阅读 · 0 评论 -
bzoj1594: [Usaco2008 Jan]猜数游戏
题目题解首先考虑如何判定是否有不合法的,我们把这些区间信息按照v从大到小排序,按顺序做,每次相当于在区间中找一个位置,填下这个v,还要满足这个v不能填在已经做过的区间中(否则那些区间的最小值就是这次的v了,显然小于了本来应该是的v),那么我们就每次判断是否能填后,用一条线段覆盖本次区间,表示这个区间不能填比我小的了。v相等的若干区间怎么办呢?我们求出这些区间的交,如果交为空,则显然不可能,否则...转载 2018-10-08 22:08:30 · 198 阅读 · 0 评论 -
线段树的两种写法
void change(int t,int l,int r,int x,int y,int v){ /*if (x<=l && r<=y){ mn[t]=lazy[t]=v; return; } down(t); if (x<=mid) change(t<<1,l,mid,x,y,v); if (mid<y) change(t&...原创 2018-10-27 15:03:16 · 488 阅读 · 0 评论 -
绍兴一中模拟赛10.30——序列
题意:给出一个长度为n(n&lt;=100000)n(n&lt;=100000)n(n<=100000)的序列,有m(m&lt;=5)m(m&lt;=5)m(m<=5)次询问,每次询问有多少个长度∈[l2,r2]∈[l2,r2]∈[l2,r2]的区间,中位数大小∈[l1,r1]∈[l1,r1]∈[l1,r1]SolutionO(nmlogn)O(nm...原创 2018-10-30 16:47:10 · 184 阅读 · 0 评论 -
vijos1083 小白逛公园
题目题意:求区间最大连续子段和,有单点修改Solutionsumsumsum表示区间和,lll表示包含左端点的最大连续子段和,rrr表示包含右端点的最大连续子段和,allallall表示整个区间的最大连续子段和#include<bits/stdc++.h>using namespace std;const int N=500002;#define mid ((l+r...原创 2018-12-13 15:39:49 · 203 阅读 · 0 评论 -
uoj#25. 【IOI2014】Wall
题目写的第一道交互题,编译要加这么一句话:g++ -o wall grader.cpp wall.cpp其他的,就是裸的线段树了#include &amp;quot;wall.h&amp;quot;const int N=2000002;#define mid ((l+r)&amp;amp;gt;&amp;amp;gt;1)int mx[N&amp;amp;lt;&amp;amp;lt;2],mn原创 2018-12-14 00:26:32 · 264 阅读 · 0 评论 -
bzoj1453: [Wc]Dface双面棋盘
题目并查集中的1..n1..n1..n表示上方,n+1..2nn+1..2nn+1..2n表示下方,合并时2n+1..4n2n+1..4n2n+1..4n用于右侧的上下方并查集#include<bits/stdc++.h>using namespace std;const int N=502;#define mid (l+r>>1)int mp[N<<...原创 2018-12-15 14:45:43 · 148 阅读 · 0 评论 -
bzoj3196: Tyvj 1730 二逼平衡树(区间线段树套splay)
题目Solution把普通平衡树代码中rtrtrt改成rt[pos]rt[pos]rt[pos],然后写一个线段树即可说说很简单,但是写起来真的麻烦死,后来我是找了一份和我写得有点像的代码改了好久才改出来的,其中一个原因竟然是我原本的平衡树板子就是错的!!!Code代码有点慢,bzojbzojbzoj上跑了9916ms9916ms9916ms注释掉的代码旁边若没有文字,则说明是另一种写...原创 2019-01-11 10:49:32 · 247 阅读 · 0 评论 -
bzoj1835: [ZJOI2010]base 基站选址
题目题解Solution显然f[i][j]f[i][j]f[i][j]表示前iii个村子建了jjj个基站且第iii个村子建了基站f[i][j]=c[i]+minf[k][j−1]+cost(k,i)f[i][j]=c[i]+min{f[k][j-1]+cost(k,i)}f[i][j]=c[i]+minf[k][j−1]+cost(k,i)cost(k,i)cost(k,i)cost(k...转载 2019-02-26 10:03:46 · 165 阅读 · 0 评论 -
bzoj3939: [Usaco2015 Feb]Cow Hopscotch
题目1.cdq分治每次分成左右两块,用左边那块更新右边的#include&lt;bits/stdc++.h&gt;using namespace std;const int M=1e9+7;int f[1002][1002],sum[1002][1002],cnt[1000002],i,j,n,m,k,a[1002][1002];inline char gc(){ stati...原创 2018-10-06 13:53:49 · 214 阅读 · 0 评论 -
洛谷P1983 车站分级
这题有三种做法1.O(nm2)1.O(nm2)1.O(nm^2)488ms / 9.61MB / 0.68KB 不用讲,直接贴代码#include<bits/stdc++.h>using namespace std;const int N=1002;int n,m,i,j,a[N],d[N],ans,f[N],k,vi[N][N],c[N][N],l;...原创 2018-07-12 20:21:02 · 3124 阅读 · 5 评论 -
bzoj1798: [Ahoi2009]Seq 维护序列seq
题目题解:与普通线段树基本相同,要注意的是乘的运算级别比加高,所以在做加法是不用管乘法,在做乘法时要管加法标程:#include<bits/stdc++.h>using namespace std;#define update tr[t].su=tr[t<<1].su+tr[t<<1|1].su;if (tr[t].su>=M)...原创 2018-04-23 09:41:18 · 125 阅读 · 0 评论 -
洛谷P3960 列队
题目题解: 我们发现其实就是维护n+1个序列,支持查找和删除第x个元素,以及在最后添加元素 前n个序列维护每一行的前m-1个元素,最后一个序列维护最后一列的元素 但是这样的话需要建n+1颗线段树,无法承受 但是可以发现一开始线段树中的元素是满的,并且一开始的元素编号十分有规律,可以直接计算 那么我们一开始就直接把所有线段树当作满的,用动态开点每次删点,后面加...原创 2018-05-16 23:21:54 · 286 阅读 · 0 评论 -
线段树
题目博客 PKU1177 Picture 参见my blog hdu3954 level up#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include&amp;amp;amp;lt;cstdio&amp;amp;amp;gt;using namespace std;const int N=10003;struct node{ int exp,lev,dis,l原创 2018-05-17 22:05:50 · 172 阅读 · 0 评论 -
洛谷P3957 跳房子
普及组的题。。。 我不会。。。题解:思路很简单,就是二分答案+dp+单调队列(线段树也可以),但是要注意细节,一个细节错了,一半分数就没了。 引用洛谷上某大佬的一段话: 发现答案的可行区间是单调的,所以二分答案,容易推出f[i]表示到达第i个格子的最大值,枚举上一步跳了多少来转移 然后仔细观察可以发现对于一个状态,如果有比他后面的状态比他答案大的话,显然不会优..于是可以...原创 2018-05-15 21:19:51 · 386 阅读 · 0 评论 -
洛谷P3953 逛公园
题目题解:f[u][k] 表示 dis(u,n)&amp;amp;lt;=MinDis(u,n)+k的方案数,答案就是 f[1][K] f[u][k]=∑f[v][k−MinDis(v,n)+MinDis(u,n)-w] 这样怎么判 0环呢?只要在搜索的时候记录个 instack 就 ok 了 如果当前的 v还在搜索的栈中就可以直接返回 -1了 不过,有一种情况例外:0环所在的路径不符合条件 ...原创 2018-05-16 21:41:40 · 137 阅读 · 0 评论 -
洛谷P3384 【模板】树链剖分
题目 题解#include&lt;bits/stdc++.h&gt;using namespace std;const int N=100002;#define up(t) tr[t]=(tr[t&lt;&lt;1]+tr[t&lt;&lt;1|1])%M;#define mid ((l+r)&gt;&gt;1)struct node{ int to,ne;转载 2018-06-13 12:59:58 · 134 阅读 · 0 评论 -
bzoj1067: [SCOI2007]降雨量
题目题解:因为每个点都对应年份和降雨量,我就用i,j代表年份,i值,j值代表这年的降雨量 四种情况: (1)i,j均未知:输出可能; (2)i知,j未知:因为j值最大可以和i值相等,所以如果i到j之间有大于i值的需输出错,否则输出可能; (3)i未知,j知:如果i到j之间有大于j值的输出错,否则输出可能; (4)i知,j知:如果i到j中已知的大于j值或j值大于i值,则输出错,...原创 2018-06-18 14:11:01 · 178 阅读 · 0 评论 -
bzoj1018: [SHOI2008]堵塞的交通traffic
题目 题解Solution 一道用线段树维护连通性的题。 第一做这种题,其实这类问题我们需要维护一下区间内的联通关系,再用我们维护的这些关系去查询。 对于这道题,我觉得可以有两种建树的方法: ①:以每一列为一个叶子节点。 ②:以每一个区间(就是每1条横向道路连接的左右两个节点)为一个叶子节点。 我选择的是第一种,我们首先需要维护6个变量(也就是区间内的6...原创 2018-07-23 13:41:27 · 205 阅读 · 0 评论 -
区间gcd
Description区间加减、区间gcdgcdgcdSolution因为gcd(a,b)=gcd(a,b−a)gcd(a,b)=gcd(a,b-a)gcd(a,b)=gcd(a,b−a),所以可以差分,gcd(al,al+1,...,ar)=gcd(al,al+1−al,...,ar−ar−1)gcd(a_l,a_{l+1},...,a_r)=gcd(a_l,a_{l+1}-a_l,.....原创 2019-03-13 15:41:54 · 1553 阅读 · 0 评论