【算法基础复习1】差分
创始人
2024-02-21 09:42:05

 目录

一、差分简介

一维差分结论

Acwing.797 差分

P4552 [Poetize6] IncDec Sequence - 差分思维玄学题


一、差分简介

  • 规定a数组下标从1开始  a[0]=0
  • b数组下标从1开始
  • 定义一个数组b,使 \large b\left [ i \right ]=a\left [ i \right ]-a\left [ i-1 \right ]
  • 对于a数组              \large a=\left \{ 4,8,6,5,10,7 \right \}
  • 其差分数组b为       \large b=\left \{ 4,4,-2,-1,5,-3 \right \}
  • a是b的前缀和数组  \large \large a\left [ i \right ]=b[1]+b[2]+...+b[i]=a[i-1]+b[i]
  • 比如  a[2] = b[1]+b[2] = 4+4= 8
  • 比如  a[4] = b[1]+b[2]+b[3]+b[4] = 4+4-2-1 = 5
  •  如果我们要给a数组【l , r】区间都+c   即 a[l]+c , a[l+1]+c …… a[r]+c

  • 首先给 b[l]+c 则    \large a[l]+c , a[l+1]+c, ...,a[r]+c

  • 然后给 b[r+1] - c 则   \large a[r+1]-c , a[r+2]-c,..., a[n]-c

先给b[l]+c 则a数组的红色区域都会+c

再给b[r+1]-c 则a数组的绿色区域都会-c

从而达到只给区间 [l,r]+c 的目的

一维差分结论

给a数组 [l,r] 区间的每个数+c,只需要给其差分数组b做如下操作即可

b[l]+=c;
b[r+1]-=c;

Acwing.797 差分

 活动 - AcWing

import java.util.*;public class Main
{static int N=(int)1e5+10;public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=sc.nextInt(),k=sc.nextInt();int[] a=new int[N];int[] b=new int[N];for(int i=1;i<=n;i++){a[i]=sc.nextInt();b[i]=a[i]-a[i-1]; //构造差分数组}int l,r,c;while(k-->0){l=sc.nextInt();r=sc.nextInt();c=sc.nextInt();b[l]+=c;b[r+1]-=c;}for(int i=1;i<=n;i++){a[i]=a[i-1]+b[i]; //b的前缀和是aSystem.out.print(a[i]+" ");}}
}

P4552 [Poetize6] IncDec Sequence - 差分思维玄学题

[Poetize6] IncDec Sequence - 洛谷

思路:

这题可以转化为求出原数列的差分数组b,最后使得 \large b[2]\sim b[n]=0

题目中对数组a的操作,相当于每次能选出 \large b_{1},b_{2},...,b_{n} 中任意两个数,一个+1,一个-1

  • x= b中所有正数之和
  • y= b中所有负数之和的绝对值
  • 我们需要先正负抵消,这时剩下最后一个数,再单独把这个数消成0
  • 所以操作数就是 max(x,y)

  • 求方案数 也就是求\large b_{i}的可能数
  • 完成以上操作后得到的b差分数组就是 \large b=\left \{ b_{1},0,...,x-y \right \}
  • 要把 x-y 消0,需要 \large \left | x-y \right | 步
  • 所以b[1]会有 \large \left | x-y \right |+1 种方案
#include 
using namespace std;const int N=1e5+10;
long long a[N],zheng,fu;int main()
{int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=2;i<=n;i++){int x=a[i]-a[i-1];if(x>0) zheng+=x;else fu+=abs(x);}cout<

相关内容

热门资讯

感念师恩作文500字初一(优... 感念师恩作文500字初一 篇一师恩如山,浩浩荡荡,伴我度过了人生的第一个重要阶段。我想起了那位伟大而...
走出现实的牢笼(推荐6篇) 走出现实的牢笼 篇一在现实生活中,我们常常会陷入各种牢笼中,无法自拔。这些牢笼可能是来自于社会压力、...
雅安地震初中作文400字【经... 雅安地震初中作文400字 篇一雅安地震初中作文400字 篇一雅安地震给人们带来了沉重的打击,也让我们...
春节的作文【经典6篇】 春节的作文 篇一中国的春节是我最喜欢的节日之一。它是中国最重要的传统节日,也是中国人团聚的时刻。每年...
七年级第二单元乡情作文600... 七年级第二单元乡情作文600字 篇一我爱我的家乡我的家乡位于一个美丽的小城市,四季如春,风景宜人。我...