首页 > 编程语言 >前缀和/差分——acwing算法基础课笔记

前缀和/差分——acwing算法基础课笔记

时间:2023-12-03 15:55:34浏览次数:30  
标签:... 前缀 复杂度 差分 数组 基础课 sum acwing

个人笔记,欢迎补充,指正。

一维前缀和

对于数组:

      a[1],a[2],a[3]...a[n];

其前缀和数组为

      s[i] = a[1] + a[2] + ... + a[i];

下标必须从1开始

求前缀和

1 for(int i=1;i<n;++i)
2     s[i] = s[i-1] + a[i];
s[0]需要定义为0

作用

求原数组里一段数(l,r)的和sum

若不用前缀和,求一段数和需要从l遍历到r,时间复杂度O(n)

用前缀和:

    sum = s[r] - s[l-1];

因为

    s[r] = s[1] + s[2] + ... + s[l-1] + s[l] + ... + s[r];
       s[l-1] = s[1] + s[2] + ... + s[l-1];   

时间复杂度O(1)

注:该作用为前缀和最大的用处,也基本是唯一的用处。

s[0] = 0原因:

使得求s[i] 和 sum可以统一公式。

 

二维前缀和

对于矩阵:  a[1][1] ~ a[x][y];

前缀和:   s[1][1] ~ s[x][y];

 

求前缀和

 上矩形的和加上左矩形的和减去左上矩形的和得出L形的和,加上a[i][j]。

1 for(int i=1;i<n;++i)
2     for(int j=1;j<n;++j)
3         s[i][j] = a[i][j] + s[i-1][j] + s[i][j-1] - s[i-1][j-1];    

作用

求(x1,y1)到(x2,y2)矩形的和

 

sum = s[i][j] - s[i-1][j] - s[i][j-1] + s[i-1][j-1];

 

 

一维差分

对于数组

    a[1],a[2],a[3]...a[n];

构造数组

   b[i] = a[i] - a[i-1]

数组b则为a的差分

主要作用

  区间修改

  将a的(l,r)的数加上一个常数c,

  常规做法是历遍l~r,给每个数加c,每次复杂度O(n)。

  而如果给b[l]加上c,那么还原a的(l,n)都将加c,

  再在b[r+1]减去c,那么还原后(l,r)都加c,其他部分不修改。

  在需要多次修改时,只有最后复原是O(n),前面修改都是O(1)。

  缺点是:静态,只能在修改完成后访问,否则时间复杂度O(n),无意义。

 

标签:...,前缀,复杂度,差分,数组,基础课,sum,acwing
From: https://www.cnblogs.com/zerocloud01/p/17872632.html

相关文章

  • Acwing.第132场周赛
    Acwing.第132场周赛比赛地址A.大小写转换题目思路:简单的模拟,可以使用c++大小写转换库函数,但是由于我早上比赛时候没用好就不敢用了就用了ASCII码转换代码:#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ strings; cin>>s; for(inti=0;i<s.size();i++)......
  • 【差分数组】我的日程安排表
    一、我的日程安排表I题目链接:我的日程安排表I实现一个MyCalendar类来存放你的日程安排。如果要添加的日程安排不会造成重复预订,则可以存储这个新的日程安排。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。日程可以用一对整数......
  • 【AcWing-Linux】03. Shell
    Shell一、Shell简介shell是我们通过命令行与操作系统沟通的语言。shell是一种脚本语言,通过对应的脚本解释器解释执行,一般作为内置于操作系统的应用程序向用户提供访问操作系统内核的服务。shell脚本(shellscript)可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复......
  • CCF认证——202109-2 贡献的变化——差分维护,前缀和算答案
    https://www.acwing.com/problem/content/4010/http://118.190.20.162/view.page?gpid=T130脑子一热抱着玩的心态试了一下三分,当然炸了,就当初认识三分了。正解是考虑p的变化的影响,p变成p+1的时候,答案的值取决于p属于相邻递增数对的值域区间的数量。也可以考虑递减的情况,两......
  • Acwing第 131 场周赛 之找最值过程中维护某个性质的方案
    https://www.acwing.com/problem/content/5367/题目如果只需要输出最大值,我都没有问题。每次需要输出方案的时候,我似乎都需要先统计最大值,再重新扫描一遍找所有能够取得最大值的方案,然后在这些方案中找到最大值。最好的做法应该是在找最大值的过程中就维护题目要求方案的排序关......
  • Acwing4244牛的比赛
    Acwing4244.牛的比赛题目部分N头奶牛,编号1∼N,一起参加比赛。奶牛的战斗力两两不同。这些奶牛之间已经进行了M轮两两对决。在对决中,战斗力高的奶牛一定会战胜战斗力低的奶牛。请问,通过上述M轮对决的结果,可以确定多少头奶牛的具体战斗力排名。输入格式第一行包含两个整......
  • 差分算法总结
    差分是前缀和的逆运算一维差分对于a1,a2,…,an,构造b1,b2,…,bn,使得ai= b1+ b2 + …+bi。此时,b数组成为a数组的差分,a数组称为b数组的前缀和。题目链接:https://www.acwing.com/problem/content/799/代码模版:1#include<iostream>23usingnamespacestd;45co......
  • 【图论】差分约束与SPFA 11.25学习小结
    开篇碎碎念每次都是以开篇碎碎念开头,虽然不知道为什么,但似乎成为了惯例。本来是直接看的差分约束,一上来发现一堆不等式,以为是数学的一个tag乱入图论(x,结果发现还真的是建图来做的,然后学了一下之后...负边权?!跑不了dijkstra啊!!于是学了一下SPFA(虽然...SPFA已死)然后顺道写了一下关于......
  • acwing 194涂满它总结
    先说下我最开始的思路我设计的估价函数是这么想的,因为估价函数必须优于实际情况嘛,我就考虑每走一步会改变什么,不难发现会把一些新的点加入连通块,我就让每一步中本来不该加入连通块(因为颜色不同)但是相连的点加入连通块,相当于每一步都加入了更多的块,肯定会比实际操作更优比如说这......
  • AcWing 920. 最优乘车 (抽象建图 + bfs
    package算法提高课;importjava.util.Arrays;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Scanner;publicclassacw920{/***本题的建图方式:*我们对于每一个巴士路线进行观察,发现从前面的站走向这一条巴士路线......