火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

算法讲解047【必备】一维差分与等差数列差分

作者: 作者的头像   huolong , 时间:2025-04-25 16:43:57 , 所有人可见, 阅读  14

前置知识 : 无,知道什么是数组就行

一维差分:太简单了,没有理解难度。不支持边操作、边查询。

等差数列差分问题描述: 一开始1~n范围上的数字都是0。接下来一共有m个操作。 每次操作:l~r范围上依次加上首项s、末项e、公差d的数列 最终1~n范围上的每个数字都要正确得到

等差数列差分的过程: 每个操作调用set方法 所有操作完成后在arr上生成两遍前缀和,即调用build方法 arr里就是最终1~n范围上的每个数字

注意: 等差数列差分在大厂笔试、面试中还不常见,是比赛必备技巧,但预计会流行 二维差分会在后续的【必备】课程里进一步讲述,支持边操作、边查询的结构会在【扩展】课程讲述

void set(int l, int r, int s, int e, int d) {
        arr[l] += s;
        arr[l + 1] += d - s;
        arr[r + 1] -= d + e;
        arr[r + 2] += e;
}
void build() {
    for (int i = 1; i <= n; i++) {
        arr[i] += arr[i - 1];
    }
    for (int i = 1; i <= n; i++) {
        arr[i] += arr[i - 1];
    }
}

题目1 航班预订统计 这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti 包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。 请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。

题目2 等差数列差分模版 一开始1~n范围上的数字都是0,一共有m个操作,每次操作为(l,r,s,e,d) 表示在l~r范围上依次加上首项为s、末项为e、公差为d的数列 M个操作做完之后,统计1~n范围上所有数字的最大值和异或和 1 <= n <= 10^7 1 <= m <= 3 * 10^5 1 <= l <= r <= n

P4231 【二阶差分】三步必杀 https://www.luogu.com.cn/problem/solution/P4231

题目3 等差数列差分经典题目 一群人落水后求每个位置的水位高度 问题描述比较复杂,见测试链接 测试链接 : https://www.luogu.com.cn/problem/P5026

注意:这道题OFFSET的设计,可以避免大量的边界讨论

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码