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

牛客 226303 【模板】差分

牛客226303 【模板】差分

image-20250408163638203

思路🧐:

  本篇将对差分算法进行基本认识,差分算法是一种通过处理数据间的差异(差分)来优化计算或解决问题的策略,核心思想是通过操作差分值来间接处理原始数据,从而简化计算或提升效率。

  构建差分数组 diff,其中 diff[i] = a[i] - a[i-1]。对区间 [L, R] 增加 k 时,只需修改两个端点:diff[L] += kdiff[R+1] -= k(若存在)。通过前缀和操作还原更新后的原数组,此时由于从L开始增加了k,还原后依然增加k,R+1之后减去k,则之后的元素将会还原,时间复杂度降为 O(1) 单次操作。

例如:

初始数组v = [3, 5, 7, 2],差分数组 diff = [3, 2, 2, -5]
操作:对区间 [2, 3](即 5, 7)加 4

步骤 1:修改差分数组
  • diff[2] += 4diff = [3, 6, 2, -5]
  • diff[4] -= 4diff = [3, 6, 2, -9]
步骤 2:还原原数组
  • v[1] = 0 + 3 = 3
  • v[2] = 3 + 6 = 95->9,增加了 4),
  • v[3] = 9 + 2 = 117->11,增加了 4),
  • v[4] = 11 + (-9) = 22 保持不变,因为增量被 diff[4] -= 4 抵消)。

结果v = [3, 9, 11, 2],仅 [2, 3] 被修改。

代码🔎:

#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    int n, m;
    cin >> n >> m;
    vector<long long> v(n + 1);
    
    for (int i = 1; i <= n; i++) 
    {
        cin >> v[i];
    }

    vector<long long> diff(n + 1);

    for (int i = 1; i <= n; i++) 
    {
        diff[i] = v[i] - v[i - 1]; // 差分计算
    }
    while (m--) 
    {
        int l, r, k;
        cin >> l >> r >> k;
        diff[l] += k;
        if (r + 1 <= n)
            diff[r + 1] -= k; // 区域内加了,区域外就需要减回去
    }
    // 前缀和还原
    for (int i = 1; i <= n; i++) 
    {
        v[i] = v[i - 1] + diff[i];
    }

    for (int i = 1; i <= n; i++) 
    {
        cout << v[i] << " ";
    }
    return 0;
}

相关文章:

  • SPI通信
  • 重头学java cpu内存硬盘的关系
  • 深度集成学习不均衡样本图像分类
  • Java Functional Interface 函数式接口
  • 大文件断点续传
  • 011_异常、泛型和集合框架
  • 大数据(5)(基础概念)Spark从入门到实战:核心原理与大数据处理实战案例
  • 【算法】前缀和(下)
  • 【Django】教程-12-柱状图
  • 5.JVM-G1垃圾回收器
  • 顺序栈简记
  • 为什么选择Redis?解析核心使用场景与性能优化技巧
  • QML面试笔记--UI设计篇02布局控件
  • 山东大学计算机网络第五章习题解析
  • 虚拟表、TDgpt、JDBC 异步写入…TDengine 3.3.6.0 版本 8 大升级亮点
  • 数字电子技术基础(四十)——使用Digital软件和Multisim软件模拟显示译码器
  • PyTorch 生态迎来新成员:SGLang 高效推理引擎解析
  • JMeterPlugins-Standard-1.4.0 插件详解:安装、功能与使用指南
  • “拈彩”测试报告
  • 【力扣刷题实战】全排列II
  • 前端官网模板/北京百度推广优化
  • wordpress 块/张家口网站seo
  • 设计师去哪个网站找工作/今日头条最新
  • 网站必须做诚信认证吗/企业seo网络推广
  • 网站国际化怎么做/情感营销经典案例
  • 微信二维码网站制作/可免费投放广告的平台