当前位置: 首页 > news >正文

算法模板(Java版)_前缀和与差分

@ZZHow(ZZHow1024)

差分是前缀和的逆运算。

前缀和

前缀和作用:快速求出 [l, r] 区间的和。

一维前缀和

  • 例题:AcWing 795. 前缀和
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] a = new int[n + 1];int[] s = new int[n + 1];for (int i = 1; i <= n; i++)a[i] = scanner.nextInt(); // 原数组for (int i = 1; i <= n; i++)s[i] = s[i - 1] + a[i]; // 差分数组while (m-- != 0) {int l = scanner.nextInt();int r = scanner.nextInt();System.out.println(s[r] - s[l - 1]); // 求 [l, r] 的和}}
}

二维前缀和

  • 例题:AcWing 796. 子矩阵的和
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();int[][] a = new int[n + 10][m + 10];int[][] s = new int[n + 10][m + 10];for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)a[i][j] = scanner.nextInt(); // 原矩阵for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]; // 前缀和矩阵while (q-- != 0) {int x1 = scanner.nextInt();int y1 = scanner.nextInt();int x2 = scanner.nextInt();int y2 = scanner.nextInt();System.out.println(s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]); // 求子矩阵的和}}
}

差分

快速的把 [l, r] 区间中的所有数都加上 C。

一维差分

  • 例题:AcWing 797. 差分
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[] a = new int[n + 10];int[] b = new int[n + 10];for (int i = 1; i <= n; i++)a[i] = scanner.nextInt(); // 原数组for (int i = 1; i <= n; i++)insert(b, i, i, a[i]); // 差分数组while (m-- != 0) {int l = scanner.nextInt();int r = scanner.nextInt();int c = scanner.nextInt();insert(b, l, r, c); // [l, r] 都加上 c}for (int i = 1; i <= n; i++)b[i] += b[i - 1];for (int i = 1; i <= n; i++)System.out.print(b[i] + " ");}public static void insert(int[] b, int l, int r, int c) {b[l] += c;b[r + 1] -= c;}
}

二维差分

  • 例题:AcWing 798. 差分矩阵
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();int[][] a = new int[n + 10][m + 10];int[][] b = new int[n + 10][m + 10];for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)a[i][j] = scanner.nextInt(); // 原矩阵for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)insert(b, i, j, i, j, a[i][j]); // 差分矩阵while (q-- != 0) {int x1 = scanner.nextInt();int y1 = scanner.nextInt();int x2 = scanner.nextInt();int y2 = scanner.nextInt();int c = scanner.nextInt();insert(b, x1, y1, x2, y2, c); // 在 (x1, y1) 至 (x2, y2) 都加上 c}for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++)System.out.print(b[i][j] + " ");System.out.println();}}public static void insert(int[][] b, int x1, int y1, int x2, int y2, int c) {b[x1][y1] += c;b[x2 + 1][y1] -= c;b[x1][y2 + 1] -= c;b[x2 + 1][y2 + 1] += c;}
}
http://www.dtcms.com/a/363789.html

相关文章:

  • 2025大学生必考互联网行业证书排名​
  • Git 代码提交管理指南
  • 【鸿蒙面试题-6】LazyForEach 懒加载
  • 单多行文本溢出
  • 大数据毕业设计选题推荐-基于大数据的大学生就业因素数据分析系统-Spark-Hadoop-Bigdata
  • 从0到1掌握进度管理:核心概念解析+目标设定的新手友好指南!
  • Elasticsearch常用DSL快速查询指南
  • Linux一共有多少个版本?
  • 基于SpringBoot2+Vue2开发的储物柜管理系统
  • 详解STM32的完整启动流程
  • Java流程控制04——if选择结构(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • CentOS 7 服务器CPU突然飙升至100%?精准定位问题。
  • HBase Region
  • token存储方案
  • 告别传统照明!安科瑞 DALI 总线智能照明系统,解锁公建项目照明新体验
  • 机器人控制器开发(人形机器人产品设计)
  • 【C++模板】从起源到入门,小白必学泛型编程指南
  • 民间药方偏方网站整站源码 带数据PHP版
  • 【爬油管搜索视频软件】youtube爬虫工具,根据关键词采集搜到的视频数据
  • 分布式爬虫的全局请求间隔协调与IP轮换策略
  • 重磅!PS2021 和企业微信 5.0 可直接运行,统信兼容引擎 V3.3.2 全面升级!
  • 【最新Pr 2025安装包(Adobe Premiere Pro 2025 中文解锁版)安装包永久免费版下载安装教程】
  • 用了企业微信 AI 半年,这 5 个功能让我彻底告别重复劳动
  • 深度学习篇---DenseNet
  • 机器人控制器开发(整体架构2 Lerobot介绍)
  • [嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_测试Qt编译的opencv4.x的库
  • 移动硬盘删除东西后,没有释放空间
  • 滚珠导轨在工业制造领域如何实现高效运行?
  • java-设计模式-4-创建型模式-工厂
  • 金博智慧:数量感知与注意力对儿童数学成绩的影响