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

算法差分详解 + 总结

文章目录

  • 差分
  • 一维差分
    • 题解
    • 代码
  • 二维差分

差分

区间修改时使用差分
1. 先预处理一个差分数组,cre[i] = a[i] - a[i-1],对差分数组求前缀和可以还原为原数组
2. 如果要让区间内的数+d,比如[l,r]内+d,那么r+1区间-d可以达到这样的效果,原数组[l,r]区间就+d了,只需要让差分数组第一个数加d,前缀和后后面的数都加上了d,所以让r+1以及后面的数-d,恢复原来的情况

举个例子

原数组: 1 2 2 1 2 1
差分数组: 1 1 0 -1 1 -1[1,3]区间+1
修改差分数组: 2 1 0 -2 1 -1
前缀和差分数组: 2 3 3 1 2 1

一维差分

题目链接
在这里插入图片描述

题解

1. 先预处理一个差分数组,对差分数组,区间[l,r]修改,l下标的数加上d,r+1下标的数减去d,[l,r]区间就加上了d,最后求下前缀和数组就达到了修改原数组的目的

代码

#include <iostream>
using namespace std;

const int N = 2e5 + 10;
int a[N];
int cre[N];
int pre[N];

int main()
{
  int n,m;
  cin >> n >> m;
  
  for(int i = 1;i <= n;i++) cin >> a[i];

  for(int i = 1;i <= n;i++)
  {
    // 差分数组
    cre[i] = a[i] - a[i-1];
  }

  while(m--)
  {
    int l,r,d;
    cin >> l >> r >> d;
    cre[l] += d;
    cre[r+1] -= d;  
  }
  for(int i = 1;i <= n;i++)
  {
    // 对差分数组求前缀和
    pre[i] = pre[i-1] + cre[i];
  }
  for(int i = 1;i <= n;i++) cout << pre[i] << " ";
  cout << '\n';

  return 0;
}

二维差分

在这里插入图片描述

相关文章:

  • lx2160 LSDK21.08 firmware 笔记 - 1.bl31.bin 链接脚本 bl31.ld.S 分析
  • JavaWeb 课堂笔记 —— 09 MySQL 概述 + DDL
  • 基于贝叶斯方法的地震动分析及AI拓展
  • mysql安装-MySQL MGR(Group Replication)+ ProxySQL 架构
  • 前端 react+ant design ,后端 springboot +mysql+redis 全栈项目零基础小白从服务器初始化开始部署上线超详细保姆级教程
  • Ubuntu24.04 编译 Qt5 和 Qt6 源码
  • Android Cmake构建的项目,需不需要配置指定ndk及版本
  • 动态路由, RIP路由协议,RIPv1,RIPv2
  • MarkDown 输出表格的方法
  • 信息安全管理与评估2022国赛正式卷一阶段答案截图
  • [leetcode]第445场周赛
  • 亲手打造可视化故事线管理工具:开发全流程、难点突破与开发过程经验总结
  • SSH远程访问及控制
  • 数据结构——哈希详解
  • Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二)
  • Tkinter进度条与状态栏
  • c++ 里友元函数可以声明与定义放一块么,答案是可以,这是友元函数会自动成为内联函数
  • Spring 事务传播行为
  • 【Android】ContentResolver的使用
  • 【2025软考高级架构师】——软件架构设计(4)
  • 做网站的原型文件下载/佛山网络推广哪里好
  • 购物网站建设行情/萧山区seo关键词排名
  • 南昌网站建设信息/百度爱采购推广一个月多少钱
  • 网站开发要学什么/网络营销推广活动有哪些
  • 做网站最好选什么语言/百度seo报价方法
  • 如何做简易的网站/营销活动推广策划