蓝桥杯算法笔记|差分学习

news/2025/2/2 20:30:51 标签: 笔记

!前情回顾

前缀和18437蓝桥账户中心

练习代码:

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n,q;cin>>n>>q;
  int a[n];
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  int sum[n];sum[0]=a[0];
  for(int i=1;i<n;i++){
    sum[i]=sum[i-1]+a[i];
  }
  while(q--){
    int l,r;
    cin>>l>>r;
    if(l==1)
    cout<<sum[r-1]<<'\n';
    else
    cout<<(sum[r-1]-sum[l-2])<<'\n';
  }
  return 0;
}

还需注意:

注意if-else的情况,注意边界。

一、差分数组

定义:

差分数组是原始数组相邻元素之间的差所构成的数组。对于给定的数组 nums,其差分数组 diff 定义为:diff[i] = nums[i] - nums[i - 1](i > 0),diff = nums。

差分代码:

a[0]=0;
for(int i=1;i<=n;i++){
diff[i]=a[i]-a[i-1];
}

作用:

1、高效的区间修改:

差分数组可以在 O(1) 的时间复杂度内完成对原始数组某个区间的元素增减操作。

例如,要对区间 [i, j] 内的所有元素增加 val,只需执行 diff[i] += val diff[j ] -= val(如果 j 1 < diff.length)。

//区间【l,r】内所有元素都加上x
 diff[i] += val 
 diff[j ] -= val
2、快速计算前缀和:

通过差分数组可以快速计算原始数组的前缀和。例如,要计算 nums 到 nums[i] 的前缀和,只需计算 diff 到 diff[i] 的累加和。

做题疑问:

 1、我的疑问是怎么才能实现让他输入多组数据

 2、同时满足当数组a【】只有一个1:从i=1开始

我的代码:
#include <bits/stdc++.h>
using namespace std;
//我的疑问是怎么才能实现让他输入多组数据
void fun(int n,int m){
int a[n+3];a[0]=0;
  for(int i=1;i<=n;i++){ cin>>a[i];}
  //求差分数组
  int d[n+3];d[0]=0;
  for(int i=1;i<=n;i++){d[i]=a[i]-a[i-1];}
  //区间更新就是给差分数组的从d【x】+z;d【y-1】-z;再用差分数组求求前缀和输出
  while(m--){
    int x,y,z;cin>>x>>y>>z;
    d[x]=d[x]+z;
    d[y+1]=d[y+1]-z;
    }
 
    for(int i=1;i<=n;i++){a[i]=a[i-1]+d[i];} 
    for(int i=1;i<=n;i++){cout<<a[i]<<' ';}
     cout<<'\n';}

int main()
{
  // 请在此输入您的代码
  int n,m;
  while(cin>>n>>m)fun(n,m);
  return 0;
}
 错因警告:

【刚开始过不了是因为,空格得用单引号'  '之内的而不是双引号“ ”之内的,并且定义a【n】d【n】时,数组越界了,改用n+3够用了】 

 错因警告:

记得看题目给的范围要求,因为用了int没有用long long导致正确率只有四分之一


http://www.niftyadmin.cn/n/5840279.html

相关文章

SQL进阶实战技巧:如何构建用户行为转移概率矩阵,深入洞察会话内活动流转?

目录 1 场景描述 1.1 用户行为转移概率矩阵概念 1.2 用户行为转移概率矩阵构建方法 (1) 数据收集

C语言怯魅——指针和数组

C语言怯魅——指针和数组 指针—— C的精华&#xff0c;也是重难点&#xff0c;很多人将C作为入门语言&#xff0c;指针往往成了新手入门编程的拦路虎。 其本质很简单&#xff0c;但由于衍生出来的用法多样&#xff0c;知晓如何以及何时使用指针并不简单。 以下是我个人的一些经…

lstm代码解析1.2

在使用 LSTM&#xff08;长短期记忆网络&#xff09;进行训练时&#xff0c;model.fit 方法的输入数据 X 和目标数据 y 的形状要求是不同的。具体来说&#xff1a; 1. 输入数据 X 的形状 LSTM 层期望输入数据 X 是三维张量&#xff0c;形状为 (samples, timesteps, features)…

upload labs靶场

upload labs靶场 注意:本人关卡后面似乎相比正常的关卡少了一关&#xff0c;所以每次关卡名字都是1才可以和正常关卡在同一关 一.个人信息 个人名称&#xff1a;张嘉玮 二.解题情况 三.解题过程 题目&#xff1a;up load labs靶场 pass 1前后端 思路及解题&#xff1a;…

【Docker】dockerfile识别当前构建的镜像平台

在编写dockerfile的时候&#xff0c;可能会遇到需要针对不同平台进行不同操作的时候&#xff0c;这需要我们对dockerfile进行针对性修改。 比如opencv的依赖项libjasper-dev在ubuntu18.04上就需要根据不同的平台做不同的处理&#xff0c;关于这个库的安装在另外一篇博客里面有…

Miniconda 安装及使用

文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中&#xff0c;“环境管理”是一个非常重要的概念&#xff0c;它主要是指对 Python 解释器及其相关依赖库进行管理和隔离&#xff0c;以确保开发环境…

react redux监测值的变化

现在想了解如何在React Redux中监测值的变化。他们之前已经讨论过使用useSelector来获取状态&#xff0c;但可能对如何有效监听状态变化的具体方法还不够清楚。需要回顾之前的对话&#xff0c;看看用户之前的需求是什么。 用户之前的问题涉及将Vue的响应式设备检测代码转换为Re…

Unity安装教学与相关问题

文章目录 1. 前言2.Unity Hub2.1 下载Unity Hub2.2 安装Unity Hub2.3 注册Unity账号2.4 在Hub上登录账号2.5 在Hub上获取许可证 3. 下载并安装Unity3.1 从Unity Hub下载&#xff08;推荐&#xff09;3.1.1 选择下载版本3.1.2 选择下载组件3.1.3 安装Visual Studio Community 20…