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

蓝桥杯备考:差分算法模板题(差分算法详解)

【模板】差分

代码

#include <iostream>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
LL a[N],f[N];
int n,m;

int main()
{
    cin >> n >> m;
    for(int i = 1;i<=n;i++)
    {
        cin >> a[i];
        f[i]+=a[i];
        f[i+1]-=a[i];
    }
    while(m--)
    {
        int l,r,k;cin >> l >> r >> k;
        f[l]+=k;f[r+1]-=k;
    }
    for(int i = 1;i<=n;i++)
    {
       a[i] = a[i-1]+f[i];
    }
    for(int i = 1;i<=n;i++) cout << a[i] << " ";
}

这道题的暴力解法就是用双层for循环遍历l到r来修改,时间复杂度就是O(m*n),经计算是10的十次方,是会超时的

我们选择用差分算法来进行优化,那么什么是差分数组呢,就是说经过预处理后每个元素都等于该元素减去上一个元素的差值,就叫做差分数组

差分数组的作用就是对某一区间同时加减一个数,我们来画一个图可见,差分数组的公式是f[i] = a[i]-a[i-1]

2.利用差分数组修改区间

我们要让[L,R]区间+k,只需要让f[l]+k,f[r+1]-k就行了

3.如何还原出修改后的原数组呢?我们只要对差分数组进行一次前缀和就行了

f1 = a1       -----  a1 = f1

f2 = a2-a1   -----   a2 = f2+a1=f2+f1

f3 = a3-a2    ------   a3 = f3+a2 = f1+f2+f3

......................................

f[i] = ai - ai-1   ------------   ai = f[i]+ai-1 = f1+f2.....+fi


http://www.kler.cn/a/534811.html

相关文章:

  • Windows本地部署DeepSeek-R1大模型并使用web界面远程交互
  • 游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文
  • k8s集群
  • PHP 中 `foreach` 循环结合引用使用时可能出现的问题
  • 基于直觉的理性思维入口:相提并论的三者 以“网络”为例
  • hot100(7)
  • DockerFile详细学习
  • C++基础系列【4】C++数据类型
  • 基于 .NET 8.0 gRPC通讯架构设计讲解,客户端+服务端
  • SAM 大模型杂谈
  • DeepSeek:基于大模型的任务管理系统
  • 蓝耘智算平台使用DeepSeek教程
  • 网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)
  • [x86 ubuntu22.04]进入S4失败
  • Go 语言 | 入门 | 先导课程
  • 使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南
  • frida 通过 loadLibrary0 跟踪 System.loadLibrary
  • Java-128陷阱、抽象类和接口的区别、为什么 hashCode()需要和equals()一起重写、封装继承多态
  • docker 搭建 mysql 主从
  • 人工智能丨PyTorch 强化学习与自然语言处理
  • 小白如何制作精致 PPT?免费 Office 插件来帮忙
  • 116,【8】 攻防世界 web shrine
  • Anaconda 下个人环境的快速安装指南:支持 GPU 运算的 PyTorch 环境
  • 清除el-table选中状态 clearSelection
  • 春晚「宇树科技」人形机器人H1技术浅析!
  • M系列/Mac安装配置Node.js全栈开发环境(nvm+npm+yarn)