差分与前缀和模板题(蓝桥杯 C++ 题目 注解)

news2025/1/23 21:17:32

目录

题目一(大学树木要打药 差分):

 代码:

题目二(小明的彩灯 差分):

代码: 

 题目三(区间更新 差分):

代码:

题目四(劳动课作业 差分):

 ​​​​​代码:

 题目五(大学里的树木要维护 前缀和):

 代码:

题目六(积木大厦 前缀和):

代码: 

差分和前缀和是常用的数列处理技巧,可以在一维数组或二维数组中快速求解某一区间的和或区间中每个元素的差值。差分可以将原始数列转化为差分数列,而前缀和可以用来求解原始数列中某一区间的和。

差分(Difference): 对于一维数组a,定义差分数组d[i] = a[i] - a[i-1] (i > 0),其中d[0] = a[0]。差分数组d是通过相邻元素的差值得到的,可以用来表示原始数列a中的元素变化情况。例如,对于数组a = [5, 3, 7, 2, 1],其差分数组d = [5, -2, 4, -5, -1]。

前缀和(Prefix Sum): 对于一维数组a,定义前缀和数组s[i] = Σa[j] (0 <= j <= i),其中s[0] = a[0]。前缀和数组s是通过累计相邻元素的和得到的,可以用来表示原始数列a中某一位置之前的元素和。例如,对于数组a = [5, 3, 7, 2, 1],其前缀和数组s = [5, 8, 15, 17, 18]。

差分和前缀和的应用:

  1. 求解某一区间的和:对于差分数组d,要求解原始数组a中[l, r]区间的和,只需计算前缀和数组s在该区间的差值,即s[r] - s[l-1]。
  2. 求解某一位置的元素值:对于差分数组d,要求解原始数组a中位置i的元素值,只需计算前缀和数组s在该位置的值,即s[i]。
  3. 更新某一区间的值:对于差分数组d,要更新原始数组a中[l, r]区间的值,只需将差分数组d在该区间内的元素都加上相应的增量。

差分和前缀和的时间复杂度均为O(n),其中n为数组的长度。差分和前缀和常用于解决区间求和、区间更新等问题,能够优化算法的效率。

题目一(大学树木要打药 差分):

 代码:

#include<iostream>
#include<cstring>
using namespace std;
int n, m;
int a[1000010];
int main()
{
    cin >> n >> m;
    memset(a, 0, sizeof(a));//初始都为0
    for (int i = 0; i < m; i++)//运用差分思想进行操作
    {
        int l, r, v;
        cin >> l >> r >> v;
        a[l] += v;
        a[r + 1] -= v;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)//前缀和还原
    {
        a[i] += a[i - 1];
        ans += a[i];
    }
    cout << ans;
}

题目二(小明的彩灯 差分):

代码: 

#include <iostream>
#include <cstring>
using namespace std;
long long a[100010];
long long b[100010];//差分数组
int main()
{
  int n,q;
  cin>>n>>q;
  memset(a,0,sizeof(a));
  for(int i=1;i<=n;i++)//差分
  {
       cin>>a[i];
       b[i] = a[i]- a[i-1];
  }
  while(q--)//操作
  {
    int l,r,x;
    cin>>l>>r>>x;
    b[l]+=x;
    b[r+1]-=x;
  }

  for(int i=1;i<=n;i++)
  {
    b[i] += b[i-1];
    if(b[i]<0)
    {
      cout<<0<<" ";
    }
    else
    cout<<b[i]<<" ";
  }
}

 题目三(区间更新 差分):

代码:

#include <iostream>
using namespace std;
long long a[100010],n,m;
long long cha[100010];//差分数组
int main()
{
  while(cin>>n>>m)
  {
    for(int i=1;i<=n;i++)//差分
    {
      cin>>a[i];
      cha[i]=a[i]-a[i-1];
    }
    while(m--)//操作
    {
      int l,r,x;
      cin>>l>>r>>x;
      cha[l]+=x,cha[r+1]-=x;
    }
    for(int i=1;i<=n;i++)//合并
    {
        cha[i]+=cha[i-1];
        cout<<cha[i]<<" ";
    }
    cout<<endl;
  }
}

题目四(劳动课作业 差分):

 ​​​​​代码:

#include <iostream>
#include <cstring>
using namespace std;
long long a[10000010], n, m;
int main()
{
    cin >> n >> m;
    memset(a, 0, sizeof(a));
    while (m--)
    {
        int l, r;
        cin >> l >> r;
        a[l] += 1;
        a[r + 1] -= 1;
    }
    for (int i = 1; i <= n; i++)
    {
        a[i] += a[i - 1];
        cout << a[i] << " ";
    }
}

 题目五(大学里的树木要维护 前缀和):

 代码:

#include<iostream>
using namespace std;
int n,m;
int a[100010];
int sum[100010];
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
       cin>>a[i];
       sum[i]=a[i]+sum[i-1];//前缀和
  } 
  for(int i=1;i<=m;i++)
  {
    int l,r;
    cin>>l>>r;
    cout<<sum[r]-sum[l-1]<<endl;
  }
}

题目六(积木大厦 前缀和):

代码: 

#include <iostream>//如1、2、3、4、5,其实只要这五项的和大于15就可以形成递增
using namespace std;
long long a[100010];
long long sum[100010];
long long sums=0;
int main()
{
  int n;
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
    sum[i]=sum[i-1]+a[i];
    sums+=i;
  }
  if(sum[n]>=sums)
  cout<<"YES";
  else
  cout<<"NO";

}

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

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

相关文章

python基于django的药品进销存管理系统elsb2

本系统是通过面向对象的python语言搭建系统框架&#xff0c;通过关系型数据库MySQL存储数据。使用django框架进行药店药品的信息管理&#xff0c;用户只需要通过浏览器访问系统即可获取药店药品信息&#xff0c;并可以在线管理&#xff0c;实现了信息的科学管理与查询统计。本文…

了解一下c++的小语法——步入c++

前言&#xff1a;c是一门既面向对象又面向过程的语言。 不同于java纯粹的面向对象和c纯粹的面向过程。 造成c该特性的原因是c是由本贾尼大佬在c的基础上增添语法创建出来的一门新的语言。 它既兼容了c&#xff0c; 身具面向过程的特性。 又有本身的面向对象的特性。 面向对象和…

selenium-java 通过配置xml文件并发运行类或者方法

1、打开idea允许某个class类&#xff0c;可以在控制台看到运行路径的下的配置文件如下图&#xff1a; 2、将路径复制到本地路径中找到temp-testng-customsuite.xml文件 3、复制该文件到项目的根目录下&#xff0c;可以修改文件名称&#xff0c;如下图 4、如图所示&#xff0c;通…

【Python】成功解决TypeError: ‘int‘ object is not iterable

【Python】成功解决TypeError: ‘int’ object is not iterable &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到…

【Flink网络数据传输(4)】RecordWriter(下)封装数据并发送到网络的过程

文章目录 一. RecordWriter封装数据并发送到网络1. 数据发送到网络的具体流程2. 源码层面2.1. Serializer的实现逻辑a. SpanningRecordSerializer的实现b. SpanningRecordSerializer中如何对数据元素进行序列化 2.2. 将ByteBuffer中间数据写入BufferBuilder 二. BufferBuilder申…

java ~ word模板填充字符后输出到指定目录

word文件格式&#xff1a; jar包&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.0</version></dependency>样例代码&#xff1a; // 封装参数集合Map<String, Ob…

【异常处理】BadSqlGrammarException低级SQL语法异常

报错 org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use …

MYSQL5.7报1205 - Lock wait timeout exceeded; try restarting transaction

简介 今天使用navicate操作添加时&#xff0c;mysql报错误&#xff0c;错误如下 原因 这个问题的原因是在mysql中产生了事务A&#xff0c;执行了修改的语句&#xff0c;比如&#xff1a; update t1 set aget18 where id1;此时事务并未进行提交&#xff0c;事务B开始运行&am…

Linux_防火墙无法启动问题

当查看防火墙状体的时候报如下错误 ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: inactive (dead) since 四 2024-03-07 07:42:16 CST; 7s agoDocs: man…

【黑马程序员】STL实战--演讲比赛管理系统

演讲比赛管理系统 需求说明 比赛规则 程序功能 创建管理类 功能描述 提供菜单界面与用户交互 对演讲比赛流程进行控制 与文件的读写交互 创建演讲比赛管理类 新建speechManager.hpp #pragma once#include <iostream>using namespace std;// 设计演讲比赛类 clas…

光线追踪5- Surface normals and multiple objects

首先&#xff0c;让我们获取一个表面法线&#xff0c;以便进行着色。这是一个垂直于交点处表面的向量。在我们的代码中&#xff0c;我们需要做一个重要的设计决定&#xff1a;法线向量是否为任意长度&#xff0c;还是将其归一化为单位长度。 诱人的是&#xff0c;如果不…

react高阶组件:如何同时兼容class类组件和函数式组件。

场景&#xff1a; 每个页面都要实现分享功能&#xff0c;但是页面有些是用class类&#xff0c;有些又直接是函数式。 方案1&#xff1a; 写2套方法。各自引用。&#xff08;维护不太好&#xff0c;改要改2遍&#xff09; 方案2&#xff1a; 可以封一个 jsx的组件&#xff0c…

服务器cpu占用高没看到进程

现象&#xff1a; 1. 今天连服务器发现root密码被改了&#xff0c;再改回去&#xff0c;登录发现服务器很卡&#xff0c;top查看&#xff0c;可用的cpu为0&#xff0c;但是没看到明显的进程&#xff0c;很显然中了病毒 2. 发现crontab -l有异常的定时计划&#xff0c;给删除掉 …

DailyNotes个人笔记管理工具

DailyNotes 是记录笔记和跟踪任务的应用程序&#xff0c;使用markdown进行编辑 部署 下载镜像 docker pull m0ngr31/dailynotes创建目录并授权 mkdir -p /data/dailynotes/config_dir chmod -R 777 /data/dailynotes启动容器 docker run -d --restart always --name mynot…

【Web安全靶场】upload-labs-master 1-21

upload-labs-master 其他靶场见专栏… 文章目录 upload-labs-masterPass-01-js前端校验Pass-02-MIME校验Pass-03-其他后缀绕过黑名单Pass-04-.hatccess绕过Pass-05-点空格点代码逻辑绕过Pass-06-大小写绕过Pass-07-空格绕过Pass-08-点号绕过Pass-09-::$DATA绕过Pass-10-点空格…

2024年腾讯云8核16G18M服务器租用价格1668元15个月

2024年腾讯云8核16G18M服务器租用价格1668元15个月&#xff0c;270GB SSD云硬盘&#xff0c;3500GB月流量。 一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8…

【开源】JAVA+Vue.js实现学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

Python与FPGA——全局二值化

文章目录 前言一、Python全局128二、Python全局均值三、Python全局OTSU四、FPGA全局128总结 前言 为什么要进行图像二值化&#xff0c;rgb图像有三个通道&#xff0c;处理图像的计算量较大&#xff0c;二值化的图像极大的减少了处理图像的计算量。即便从彩色图像转成了二值化图…

HarmonyOS应用开发-环境搭建(windows环境)

官网地址&#xff1a;链接 DevEco Studio 3.1.1 Release&#xff1a;下载地址 1、安装DevEco Studio 直接安装即可 2、配置开发环境 1.运行已安装的DevEco Studio&#xff0c;首次使用&#xff0c;请选择Do not import settings&#xff0c;单击OK。 2.安装Node.js与ohpm。注…

STC89C52串口通信详解

目录 前言 一.通信基本原理 1.1串行通信与并行通信 1.2同步通信和异步通信 1.2.1异步通信 1.2.2同步通信 1.3单工、半双工与全双工通信 1.4通信速率 二.串口通信简介 2.1接口标准 2.2串口内部结构 2.3串口相关寄存器 三.串口工作方式 四.波特率计算 五.串口初始化步骤 六.实验…