差分
AcerMo
一只辣鸡大学生
展开
-
[差分入门讲解] 洛谷P3397地毯
题目中文不再赘述这道题一个很显然的思路是暴力枚举每块地毯能覆盖到的位置,然后再输出,发现复杂度O(????),很迷,显然过不去有小伙伴说了,开线段树维护!对,没错,可以过,但是我要引入一个新的概念----->差分什么是差分?具体的概念我也说不清,不过我们可以通过这道题来引入,然后自己去感性理解加入我们的地毯是一个这样的地图[0][0][0][0][0][0][0][0][0]假如我们要将2~...原创 2018-06-25 11:42:41 · 779 阅读 · 0 评论 -
洛谷P3128USACO最大流[树上差分入门]
一道树上差分的入手好题,中文题面不再赘述读完题后,我们发现,答案就是图中的点被经过的最多次数,即有多少条路径经过它,暴力期望得分20~40分,正解是什么呢?树上差分+LCA没错,和差分的操作一样,在区间的左端点加一,在右端点+1的位置减一,只不过放到了树上,我们先预处理每个点的LCA,之后我们发现了一些树上差分的性质1.假如我们现在有一条从u->v的路径,那么假如u和v的lca为a,那么u-...原创 2018-06-25 14:49:07 · 352 阅读 · 0 评论 -
BZOJ3631&&洛谷P3258[JLOI2014]松鼠的新家
树上差分裸题两个目标点之间的最短路径上的房间都要放一个糖,所以用树上差分,然后因为从一个房间出发是不需要糖果的,所以最后输出之前要减一再输出看这里代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include&l...原创 2018-06-25 15:23:22 · 287 阅读 · 0 评论 -
BZOJ4424&&CF19E Fairy
讲不清,先挖个坑,反正是用树上差分做的//By AcerMo #include<cmath>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>原创 2018-07-06 20:30:51 · 227 阅读 · 0 评论 -
BZOJ3043&&洛谷[Poetize6] IncDec Sequence
日常毒瘤不难发现,我们对序列两两做差,得到一个差分数组,有三种情况d[i]=0,i 和i-1相等,d[i]&gt;0,i大于i-1,d[i]&lt;0,i小于i-1,对于第一种情况,显然要更改的话就是一起改,对于第二种情况和第三种情况 ,每次修改一段区间,这一段的d都不会变,所以就相当于在d的一个位置+1,在另一个位置-1,另一个显然的性质就是最后序列一样时,d等于0,然后我们统计一下s1=∑...原创 2018-09-19 11:03:57 · 326 阅读 · 0 评论 -
BZOJ4326&&洛谷P2680 运输计划
倍增LCA+差分+二分答案简称毒瘤题我们预处理从根到每个点的dis值,然后把每条边的边权放到点上,然后处理每条航线起点终点的lca,然后我们二分一个改完权值的的路线长,去检验是否能达到,如何检验呢?先把所有路线长大于mid的路线捡出来,然后看他和mid差多少,取一个最大值,这是要改造的道路的最小值,若比他还小,那么dis-x>mid不符合条件,然后是选出来的道路被经过次数要大...原创 2018-09-14 11:25:26 · 240 阅读 · 0 评论 -
Codeforces17EPalisection
manacher+差分我们定义l[i]为以i开头的回文串个数,r[i]为以i结尾的回文串个数,于是我们发现,对于一个点i,∑k=1i−1r[k]∗l[i]\sum_{k=1}^{i-1}r[k]*l[i]∑k=1i−1r[k]∗l[i]就是i之前不与以i开头的回文串相交的个数,于是我们得到所有不相交的回文串个数为∑i=1n(l[i]∗∑k=1i−1r[k])\sum_{i=1}^n(l[i]*...原创 2018-09-21 10:00:48 · 349 阅读 · 0 评论 -
SPOJ GSS4 洛谷P4514上帝造题的七分钟&&[树状数组进阶]
树状数组大法好讲这道题之前先讲点进阶内容一维树状数组的区间修改+区间求和不会树状数组入门知识的-&gt;出门左转不会树状数组单点修改的-&gt;出门右转好了,现在留下的都是奆佬我们先讲一下区间修改根据之前单点修改,区间求和的思想,发现差分数组非常有用,那么我们不难发现一个有趣的性质,对于差分数组d[i],原数组a[i],存在a[i]=∑k=1id[i]a[i]=\sum\limits...原创 2018-10-12 11:11:00 · 239 阅读 · 0 评论 -
Codeforces460C Present
二分题意一个长度为n的数列,你m次机会可以给连续的w个元素加1,问你最后能的到的数列里最小值的最大值是多少思路最小值最大,肯定是二分,如何验证答案?我们从左向右扫,第一个不满足mid的位置就加到mid,从他向后的w个位置相应也要+(mid-h[i])这么多,听起来是一个优秀的n2n^2n2做法?想一想优化,发现区间加值,貌似可以差分一下?用一个变量s,每次进入for之后先+=d[i],...原创 2018-10-17 09:04:13 · 273 阅读 · 0 评论