差分
Self-Discipline
在校大学生
展开
-
二维树状数组模板(区间更新,单点查询)(以POJ 2155为例)
题目:点击打开链接 题意:n*n坐标图起初都为0,C:翻转左下和右上两个坐标围成的矩阵中所有点,Q:查询此点的0 1状态。 分析:利用差分的思想,推广到二维,一维单点查询就是前缀和,即query(x)。区间修改先让s-n都加num,再让t+1-n减去num,即update(s, num),update(t+1, -num)。二维的单点查询变成二维就好了query(x, y)。区间修改update(...原创 2018-10-30 10:28:40 · 362 阅读 · 0 评论 -
CH 4302 Intervavl(线段树维护区间gcd,区间加)
题意:给定一个长度为 N 的序列,M 个操作,支持区间加,区间查询最大公约数。 分析:若是单点修改,区间最大公约数,则可以发现,每次修改最多改变 O(logn) 个答案,且 gcd 可以合并,因此可以直接在线段树上维护。但是对于区间加来说,无法在已知区间加了某一个数时快速计算出新的区间最大公约数,因此,最坏情况下复杂度可能退化到 O(n)。考虑辗转相除法的性质,gcd(x,y,z)=gcd(x,...原创 2019-07-06 22:37:41 · 478 阅读 · 0 评论 -
CH0304 IncDec Sequence (差分)
题意: 给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。 分析: LYD代码: #include<bits/stdc++.h> #define ll long l...原创 2019-07-06 23:14:07 · 283 阅读 · 0 评论 -
P1438 无聊的数列(线段树+差分)
题意:给一个区间加一个,首项为k,公差为d 的等差序列,求单点值。 分析:先建一颗差分线段树,如果我们给某一个区间 l 到 r 加上一个首相为k 公差为d 的等差序列,相当于 给 l 这个点的差分数组 加上 k,l+1 到 r 的这段数组 加上d,r+1 这个点差分数组加上 -(k+(r-l+1-1)*d),然后再利用差分数组的前缀和恰好等于这个点的值 ,利用线段树进行区间求和就好了,这样问题就变...原创 2019-07-19 19:32:18 · 178 阅读 · 0 评论 -
ZOJ3943 Himalayas(线段树+差分)
题意:有n座山,每座山有个高度,若满足1<i<n&&Hi-1>Hi<Hi+1,那么它就是山谷,每次地震,第L到第R座山高度会发生变化,每座山变化为A+(i-L)*B(1<=i<=n),问每次地震后有几座山谷。 分析:相当于区间加一个等差数列,和洛谷P1438差不多,对原数组差分之后,考虑用线段树对差分数组进行维护,区间操作可以变为三段处理,如果...原创 2019-07-19 21:33:56 · 181 阅读 · 0 评论