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

ZT21 【模板】差分

描述

对于给定的长度为 n 的数组{a1​,a2​,…,an​} ,我们有 m 次修改操作,每一次操作给出三个参数 l,r,k ,代表将数组中的 al​,al+1​,…,ar​ 都加上 k 。

请你直接输出全部操作完成后的数组。

输入描述:

第一行输入两个整数 n,m(1≦n,m≦10^5) 代表数组中的元素数量、操作次数。

第二行输入 n 个整数 a1​,a2​,…,an​(−10^9≦ai​≦10^9) 代表初始数组。

此后 m 行,每行输入三个整数 l,r,k(1≦l≦r≦n; −10^9≦k≦10^9) 代表一次操作。

输出描述:

在一行上输出 n 个整数,代表全部操作完成后的数组。

示例1

输入:

3 2
1 2 3
1 2 4
3 3 -2

输出:

5 6 1
一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.给定一个长度为n的数组,以及m次操作

2.每次操作有三个参数l,r,k,代表将数组中的al到ar(l和r表示下标)全都加上k的值

3.求m次操作后的数组每一项的值

二、解题思路

1.首先读取数据到long long数组a

2.然后读取m次操作到一个dp数组

3.读取的方式是,将dp[l] += x;

然后将dp[r + 1] -= x;

4.之后遍历dp数组,dp[i] += dp[i - 1];

每一项等于前一项和本项和。

5.最后我们遍历两个数组,输出结果结果是原数组a[i]加上dp[i]数组(dp数组记录了所有的区间增加和减少)

三、具体步骤

使用的语言是C

#include <stdio.h>
#define MAX_N 101010
#define ll long long
ll a[MAX_N];
ll dp[MAX_N];

int main() {
    int n, m, i;
    scanf("%d%d", &n, &m);
    for (i = 1; i <= n; i++) {
        scanf("%lld", &a[i]);
    }
    for (i = 1; i <= m; i++) {
        int l, r, x;
        scanf("%d%d%d", &l, &r, &x);
        dp[l] += x;
        dp[r + 1] -= x;
    }
    for (i = 1; i <= n; i++) {
        dp[i] += dp[i - 1];
    }
    for (i = 1; i <= n; i++) {
        printf("%lld ", a[i] + dp[i]);
    }
    return 0;
}

http://www.dtcms.com/a/46636.html

相关文章:

  • Python 面向对象编程-继承与多态
  • SyntaxError: positional argument follows keyword argument
  • CountDownLatch与CyclicBarrier使用及区别
  • Visual Studio Code集成MarsCode AI
  • 【Python 初级函数详解】—— 参数沙漠与作用域丛林的求生指南
  • 693. 交替位二进制数
  • ETL-kettle数据转换使用详解
  • 利用STM32TIM自制延迟函数实验
  • jeecgboot项目idea启动项目(二)
  • Java基础语法38(异常处理try-catch和throws)
  • 40岁开始学Java:避免创建不必要的对象
  • 分治算法+题目
  • 基金 word-->pdf图片模糊的解决方法
  • MyBatis调用外部静态方法
  • 飞致云开源社区月度动态报告(2025年2月)
  • 基于HTML的贪吃蛇小游戏
  • 目前主流 AI 大模型体系全解析:架构、特点与应用
  • 代码规范和简化标准
  • macos下myslq图形化工具之Sequel Ace
  • 记Android12上一个原生bug引起的system_server crash
  • Scala的match表达式的基本简单介绍
  • ​Java 实体类中的常见问题:@Data 注解与 is 前缀字段的陷阱​
  • DrissionPage动态库过(某网)滑块(100%成功)
  • LeetCode279完全平方数(动态规划)
  • LeetCode 2 - 两数相加
  • 关于博客系统的测试报告
  • 机器人学习模拟框架 robosuite (3) 机器人控制代码示例
  • 【redis】redis持久化
  • Mysql的基础命令有哪些?
  • 学习Java:全面解析构造方法重载详解