差分---(小明的彩灯)蓝桥杯真题,差分思想很明确的模板

news2024/11/19 19:41:11

小明的彩灯

  • 题目描述
  • 暴力解法
  • 差分的思路和模板
  • 差分解法

题目描述

小明拥有 N个彩灯,第 i个彩灯的初始亮度为 ai​。

小明将进行 Q次操作,每次操作可选择一段区间,并使区间内彩灯的亮度 +x(x可能为负数)。

求 Q次操作后每个彩灯的亮度(若彩灯亮度为负数则输出 0)。
​​​​​​​​在这里插入图片描述
输入输出样例
输入

5 3
2 2 2 1 5
1 3 3
4 5 5
1 1 -100

输出

0 5 5 6 10

暴力解法

看见这个题其实第一反应是暴力应该挺好写,确实,思路很明确,就是将[ l , r ]上的数都 “+x”。呢就循环,时间复杂度也是O(n),甚至空间开辟的更少,有一点要注意,数据范围,int是不满足的。

#include<iostream>
using namespace std;
const int n=5*1e5;
long long A[n];
int main()
{
  int N,Q;
  scanf("%d%d",&N,&Q);
  for(int i=1;i<=N;i++)
    scanf("%lld",&A[i]);
  while(Q--)
  {
    long long l,r,x;
    scanf("%lld%lld%lld",&l,&r,&x);
    for(int i=l;i<=r;i++)
      A[i]+=x;
  }
  for(int i=1;i<=N;i++)
  {
    if(A[i]<0) A[i]=0;
    printf("%lld ",A[i]);
  }
  return 0;
}

在这里插入图片描述

差分的思路和模板

差分差分顾名思义,就是把加起来的数,再拆开,研究过前缀和的便知道,差分便是前缀和的逆运算。
一维数组差分
就拿样例的数组 a [2,2,2,1,5],
则它的差分数组 b [2,0,0,-1,4]

假设我们让数组区间[2,4]元素都增加 2
则数组a[2,4,4,3,5]
差分数组b[2,2,0,-1,3]

我们可以发现规律,对于差分数组b,对于任意区间[l,r],“+x” 它的数组变化为b[l]+=x, b[r+1]-=x;
其次为了方便对数据进行差分,通常将数据存放再a[1]的位置,a[0]空为0

呢说到这了,差分要如何存储呢?
这里依然使用,a [2,2,2,1,5]作为模板,我们现在要做的是将其拆为原型

a[i-1]=b[1]+b[2]+b[3]+····+b[i-1]
a[i]=b[1]+b[2]+b[3]+·······+b[i-1]+b[i]
So, b[i]=a[i]-a[i-1]
这里可以开个小差,考考大家
一维前缀和是咋存的呢?
笨蛋,移个项,a[i]=a[i-1]+b[i],记住了吗?嘿嘿

之后很总要的一点,为什么可以利用差分?

上面也有说,对于差分数组b,对于任意区间[l,r],“+x” 它的数组变化为b[l]+=x, b[r+1]-=x,由于,差分又重组,前面加一个元素,其实相当于后面每个元素在求总和时都加了一个元素,超出区间的人家不需要加这个元素,你就再减去,这个适合,数很多的情况,不用一个一个加了

差分解法

#include <iostream>
using namespace std;
const int n=5*1e5;
long long A[n]={0},B[n]={0};
int main()
{
  int N,Q;
  scanf("%d%d",&N,&Q);
  for(int i=1;i<=N;i++)
  {
    scanf("%lld",&A[i]);
    B[i]=A[i]-A[i-1];//差分
    // cout<<B[i];
  }
  while(Q--)
  {
    long long l,r,x;
    scanf("%lld%lld%lld",&l,&r,&x);
    B[l]+=x;
    B[r+1]-=x;//
  }
  for(int i=1;i<=N;i++)
  {
    A[i]=A[i-1]+B[i];
  }
  for(int i=1;i<=N;i++)
  {
    if(A[i]<0) A[i]=0;
    printf("%lld ",A[i]);
  }

  // 请在此输入您的代码
  return 0;
}

在这里插入图片描述
其实,时间消耗差不多,甚至暴力的更好,这个只是差分模板很好的一个题,但是当数据很大很多,还是建议使用差分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动控制原理笔记-传递函数

目录 拉普拉斯反变换&#xff1a; 用拉普拉斯变换求解常微分方程的步骤&#xff1a; 部分分式展开法&#xff1a; 留数法&#xff1a; 零极点图: 传递函数 定义&#xff1a; 传递函数的标准形式&#xff1a; 传递函数的性质&#xff1a; 传递函数的局限性&#xff1a…

SOT23-6封装 小封装 超精简外围PD Sink端取电协议芯片

PD协议&#xff08;USB-PD&#xff09;的全名是USB Power Delivery&#xff0c;是由 USB-IF 组织制定的一种快速充电规范&#xff0c;是目前主流的快充协议之一&#xff0c;USB-PD 快充协议是以 Type-C 接口输出的&#xff0c;我们经常看到的华为笔记本配的Type-C 65W充电器就是…

【C语言】函数栈帧的创建和销毁

目录 1.函数栈帧的含义 概念 要用到的汇编语言的知识 示例 2.理解栈帧 2.1 main函数栈帧的创建 2.2 局部变量的创建 2.3 函数传参 2.4 调用函数 2.5 函数返回 一个.c文件在调用函数的时候&#xff08;包括main 函数&#xff09;&#xff0c;其内存中的栈区有什么变…

Qt之实现工具箱界面程序

最近终于有点空闲时间了&#xff0c;就写写博客&#xff0c;就把上次给客户实现的一个程序开发过程写出来&#xff1b;客户要求的是在主界面上能有几个很好看的按钮&#xff0c;单击各个按钮能弹出不同的应用窗口&#xff0c;如游戏窗口&#xff0c;显示图像窗口等等&#xff0…

pcl 基本操作汇总

目录 PCLVisualizer简单的点云可视化 createViewPort创建视窗 代码 效果 点云视窗上打印文本信息 使用addText 合并多个点云 xyzxyz xyz nxnynz 新建自己的Point类型 点云的刚体变换&#xff08;旋转平移&#xff09; 以下是pcl点云基本操作&#xff0c;后面会慢慢…

C++--数据结构--最小生成树-- Kruskal--Prim--高阶0713

注&#xff1a;本次修改了添加边的一些其他情况可以采用坐标来添加边 void _AddEdge(size_t srci, size_t dsti, const W& w) {_matrix[srci][dsti] w;// 无向图if (Direction false){_matrix[dsti][srci] w;} }void AddEdge(const V& src, const V& dst, const…

【学习笔记03】vue的组件

目录一、组件二、组件的分类&#xff08;一&#xff09;全局组件&#xff08;二&#xff09;局部组件1、为什么vue组件 data函数返回一个对象2、bootstrap的使用三、父组件传值给子组件1、父传子实现进度条2、 props的属性四、子组件传值给父组件五、兄弟组件传值一、组件 可以…

【Javassist】快速入门系列04 使用Javassist更改整个方法体

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 文章目录系列文章目录前言引入Javassist jar包使用Javassist更改整个方法体总结说明前言 上一章我们介绍了使用Javas…

2022全年度白酒十大热门品牌销量榜单

白酒为中国特有的一种蒸馏酒&#xff0c;是世界六大蒸馏酒之一&#xff0c;中国是全球最大的蒸馏酒市场&#xff0c;中国的白酒消费也位列世界烈酒行业领先地位。近几年来&#xff0c;由于市场需求的不断提升及居民的消费升级&#xff0c;高档白酒价格也不断增长&#xff0c;从…

会员管理系统可行性研究

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.可行性研究前提 2.1要求 2.2目标 2.3条件、假定和限制 2.4决定可行性的因素 3.现有小程序分析 3.1经…

进程-计算机是如何工作的

文章目录冯诺依曼计算机体系组成寄存器和内存编译型语言vs解释型语言进程进程管理进程的状态虚拟地址空间虚拟内存冯诺依曼计算机体系 组成 (1) 输入设备:键盘&#xff0c;鼠标 (2) 输出设备:显示器&#xff0c;打印机 其中硬盘(可做输入、输出) (3) 存储器:内存 (4) CPU 运…

Composing Programs(SICP python版) chap1 笔记

《Composing Programs》(SICP python版) chap1 笔记 持续更新中 在学习 CS61A 2022fall的时候配着看的 文章目录《Composing Programs》(SICP python版) chap1 笔记Chapter 1: Building Abstractions with Functions1.1 Getting Started1.1.1 Programming in Python1.1.2 Insta…

python安装face_recognition

本人使用系统为windows10,python的版本是3.8&#xff0c;在安装face_recognition之前需要安装以下内容&#xff1a; 1.cmake 2.dlib&#xff0c;dlib的安装依赖于cmake 1 安装CMake 1.1 官网下载&#xff1a;CMake 1.2 开始安装CMake: 1.3 验证是否安装成功&#xff1a; 打开…

10 Mysql中各种锁

概述 MySQL中的也存在一些类型的锁&#xff0c;用来保证多个连接同时操作数据时的安全即数据的一致性问题&#xff1b;同时&#xff0c;虽然锁能够解决一些数据的一致性和有效性&#xff0c;但是我们还是要选择合适的锁来降低锁对于并发问题的影响 1. 全局锁 全局锁就是对整…

傻白探索Chiplet,互连技术研究现状(七)

目录 一、串行互连 二、并行互连 三、串行与并行互连的比较 四、互连标准接口 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;UCIe Chiplet的可行性常常受到片间互连的性能、可用性以及功耗和成本问题的限制&#xff0c;各种异构芯片的互连接口和标准的设计在技…

Web3中文|恐惧vs伦理:AI艺术评论家错在哪里?

本周&#xff0c;人工智能引发众怒。随着“AI艺术”在网络的流行&#xff0c;一群艺术家正在知名艺术家平台Art Station上掀起一场反AI艺术的抗议活动&#xff0c;而人工智能技术的拥趸者也及时回击了这波反对热潮。 这种充斥着反对意见的热潮是迟早会出现的。现在这些人认为“…

简单说手什么是JWT?

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案。 传统的session认证 http协议本身是一种无状态的协议&#xff0c;而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证&#xff0c;那么下一次请求时&#xff0c;用户还要再一…

【Lingo】【MATLAB】【求解运筹学问题模板题】

文章目录一、线性规划模型&#xff08;Lingo&#xff09;1.线性规划问题&#xff08;模板&#xff09;2.求解最优化问题3.包装箱平板车问题4.职员时序安排问题5.运输问题6.排菜单问题7.工地施工问题8.生产计划优化研究&#xff08;柴油机生产&#xff09;二、线性规划问题&…

机器学习算法基础——逻辑回归

01逻辑回归可以用来解决简单的二分类问题。 逻辑回归的预测函数为hθ(x)g(θTx)h_\theta (x)g(\theta^Tx)hθ​(x)g(θTx)&#xff0c;其中g(x)g(x)g(x)为sigmoidsigmoidsigmoid函数&#xff0c;用于将数值映射到区间[0,1][0,1][0,1]中&#xff0c;然后再取对数值用于刻画损失函…

51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

内 容&#xff1a;编写代码实现LED灯的点亮功能 学 时&#xff1a;2学时 知识点&#xff1a;分析原理图、LED灯控制原理 重点&#xff1a;GPIO参数配置、LED原理图分析 难点&#xff1a;编写 GPIO参数配置函数、LED点亮函数 时间&#xff1a;2022年12月21日 9:00&#xff5e;…