【蓝桥杯每日一题】差分算法

news2024/11/25 15:53:07

🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙我与杀戮之中绽放,亦如黎明的花朵🌙
🍉一起加油,去追寻、去成为更好的自己!

蓝桥杯倒计时 44天

文章目录

  • 🍎、差分
  • 🍎、例题分析
        • 🍇、(AcWing)差分
        • 🍇、(AcWing)差分矩阵
        • 🍇、(AcWing)改变数组元素
  • 🍎、总结

提示:以下是本篇文章正文内容,下面案例可供参考


🍎、差分

🍉、差分的简单概念
    差分在数学领域的理解:有数列a1 a2 a3……an……,其中an+1= an + d( n = 1,2,…n )d为常数,称为公差, 即 d = an+1 -an , 这就是一个差分, 通常用D(an) = an+1- an来表示,于是有D(an)= d , 这是一个最简单形式的差分方程。
    差分在计算机领域的理解:差分是前缀和的逆运算,差分的作用是在O(1)的时间复杂度下,让一段区间,例如是[i, n]区间内的每一个数都加或者减同一个数。

    一维差分的公式:s[L] += c , s[R + 1] -= c;
其中L是区间的左端点,R是区间的右端点。
    二维差分的公式:S[x1][y2] += c;   s[x1][y2 + 1] -= c;
                                 S[x2 + 1] -= c;   s[x2 + 1][y2 + 1] += c;

    对于差分数组的理解:原数组a[]是差分数组b[]的前缀和,a[i] = b[0] + b[1] + b[2] + … + b[i],所以在最后输出结果时一维差分公式:a[i] = a[i - 1] + b[i];
二维差分最后输出结果的公式是: a[i][j] = a[i - 1][j] + a[i][j - 1] + b[i][j]

🍉、图解一维前缀和
在这里插入图片描述
🍉、图解二维前缀和
在这里插入图片描述


🍎、例题分析

🍇、(AcWing)差分

本题链接: 差分
在这里插入图片描述
简单分析题意:就是在q次询问中,每次在原数组的一段区间上加上一个值C,最后输出q次询问后的结果。
代码示例:

#include<iostream>
using namespace std;
const int N = 100010;
int n, m;
int a[N], b[N];
void insert(int l, int r, int c)
{
    b[l] += c;
    b[r + 1] -= c;
}
int main ()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        insert(i, i, a[i]);//对b[i]的初始化
    }
    while(m --)
    {
        int l, r, c;
        cin >> l >> r >> c;
        insert(l, r, c);
    }
    for(int i = 1; i <= n; i++)
    {
        a[i] = a[i - 1] + b[i];
        cout << a[i] << ' ';
    }
    cout << endl;
    return 0;
}

🍇、(AcWing)差分矩阵

本题链接: 差分矩阵
在这里插入图片描述
简单分析题意:就是在q次查询中,每次在一个区间内加/减一个值。
代码示例:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1010;
int b[N][N], a[N][N];
int n, m, q;
void add(int x1, int y1, int x2, int y2, int c)
{
    b[x1][y1] += c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y1] -= c;
    b[x2 + 1][y2 + 1] += c;
}
int main ()
{
    cin >> n >> m >> q;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            scanf("%d", &a[i][j]);
            add(i, j, i, j, a[i][j]); // 每次输入一个a[i],就要初始化一下b差分数组
        }
    while(q --)
    {
        int x1, y1, x2, y2, c;
        cin >> x1 >> y1 >> x2 >> y2 >> c;
        add(x1, y1, x2, y2, c);
    }
    for(int i = 1; i <=n;  i++)
    {
        for(int j = 1; j <= m; j++)
        {
            a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + b[i][j];//这里使用二维前缀和公式
            printf("%d ", a[i][j]);
        }
        puts("");
    }
    
    return 0;
}

🍇、(AcWing)改变数组元素

本题链接: 改变数组元素
在这里插入图片描述
分析题意:
在这里插入图片描述
代码示例:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 200010;
int b[N];
int n;
int main ()
{
    int t;
    cin >> t;
    
    while(t --)
    {
        scanf("%d", &n);
        memset(b, 0, 4 * (n + 1));
        for(int i = 1; i <= n; i++)
        {
            int x;
            scanf("%d", &x);
            x = min(x, i);
            int l = i - x + 1, r = i;//差分数组的左右两端
            b[l]++, b[r + 1]--; //差分操作的模板
        }    
        //求原数组,就是差分数组的前缀和
        for(int i = 1; i <= n; i++)
        {
            b[i] += b[i - 1]; //差分和前缀和是互逆操作
        }
        for(int i = 1; i <= n; i++)
        printf("%d ", !!b[i]); // 原来是0的还是0,原来大于等于1的就变为1了。
        puts("");
    }
    
    return 0;
}

🍎、总结

    本文简要介绍了差分的简要概念和几道差分的经典例题,希望大家读后能有所收获!

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

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

相关文章

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动 银河麒麟V10桌面版系统允许用户开发自己的qt界面程序并将其添加为开机自启动。这样&#xff0c;每次开机后&#xff0c;用户开发的qt界面程序会自动启动&#xff0c;无需手动打开。 要将用户开发的qt界面程序添加…

走进chatGPT新一代机器人

chatGPT这款新一代对话式人工智能便在全球范围狂揽1亿名用户&#xff0c;并成功从科技界破圈&#xff0c;成为街头巷尾的谈资。chatGPT能干什么&#xff1f;打开官网https://openai.com/blog/chatgpt/ &#xff0c;完了&#xff0c;芭比Q了试下其他家的接口讲笑话写代码写解决方…

格雷码应用意义及编解码

文章目录1. 格雷码的应用意义2. 由自然数编码获得格雷码2.1 对称法实现2.2 公式法实现3. 由格雷码解码获得自然数1. 格雷码的应用意义 学过晶体管知识的朋友们都知道&#xff0c;数据位跳变就相当于硬件电路中的晶体管翻转。许多位同时跳变就相当于多个晶体管同时翻转&#xf…

【C++】STL之空间配置器 | STL总结

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;什么是空…

全球首个云渗透测试认证专家课程发布!腾讯安全领衔编制

2月20日&#xff0c;国际云安全联盟CSA发布了“云渗透测试认证专家CCPTP”课程体系&#xff0c;这是全球首个云渗透测试能力培养课程及人才认证项目&#xff0c;有效地弥补了云渗透测试认知的差距和技能人才培养的空白。腾讯安全在该项目中担任核心课程编撰单位。CSA是全球中立…

【双指针问题】LeetCode344、345、 844、283问题详解及代码实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

曼恩斯特在创业板注册生效:拟募资约5亿元,彭建林夫妇为实控人

2月21日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;深圳市曼恩斯特科技股份有限公司&#xff08;下称“曼恩斯特”&#xff09;的注册生效。据贝多财经了解&#xff0c;曼恩斯特于2021年6月30日在创业板递交招股书&#xff0c;2022年6月15日获得上市委会议通过&…

老戏骨李立群真敢说,互联网吐槽郝蕾演技太差

说起老戏骨李立群&#xff0c;可能很多人都想不起来&#xff0c;他究竟出演过什么影视作品&#xff0c;不过这依然不能阻挡他的走红。李立群的走红非常偶然&#xff0c;因为在大陆拍戏多年&#xff0c;他已经在上海买房定居&#xff0c;当然偶尔也会去台北省亲。 在上海疫情爆发…

【C++】3.类和对象(中)

1.类的6个默认成员函数 一个类什么都没有不是空类 我们没有写相关函数 但编译器会自动生成6个默认函数 2.构造函数 1概念 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自动调用&#xff0c;保证每个数据成员都有一个合适的初始值&…

微服务架构中的多级缓存设计还有人不懂?

今天我们来聊聊缓存这个话题&#xff0c;看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容&#xff1a; Web 应用的客户端缓存&#xff1b;应用层静态资源缓存&#xff1b;服务层多级缓存。 首先&#xff0c;咱们先讲解微服务架构的多级缓存设计。 微服务…

ElasticSearch 学习笔记总结(一)

文章目录一、 数据的 分类二、 ElasticSearch 介绍三、 ElasticSearch 搭建四、正排索引 和 倒排索引五、ES HTTP 索引 操作六、ES HTTP 文档 操作七、ES HTTP 查询数据1. 条件查询2. 分页查询3. 排序查询4. 多条件查询5. 全文检索 完全匹配 高亮显示6. 聚合查询八、 ES HTTP 映…

2.22JVM

一.学习目标1)JVM内存区域划分2)JVM的类加载机制3)JVM的垃圾回收1.JVM执行流程程序在执行之前先要把Java代码转换为字节码(.class),JVM首先需要通过一定的方式类加载器把文件加载到运行时数据区,而字节码文件是JVM的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特…

【11-JVM面试专题-说说你知道的垃圾回收算法?垃圾回收器你知道吗?CMS、G1和ZGC垃圾回收器你有过了解吗?】

JVM面试专题-说说你知道的垃圾回收算法&#xff1f;垃圾回收器你知道吗&#xff1f;CMS、G1和ZGC垃圾回收器你有过了解吗&#xff1f; JVM面试专题-说说你知道的垃圾回收算法&#xff1f;垃圾回收器你知道吗&#xff1f;CMS、G1和ZGC垃圾回收器你有过了解吗&#xff1f;你掌握的…

Wincc Flexible smart V4触摸屏软件中批量导入PLC变量的具体方法示例(无需单个添加)

Wincc Flexible smart V4触摸屏软件中批量导入PLC变量的具体方法示例(无需单个添加) 具体操作步骤可参考以下例子中的内容: 打开STEP7-MicroWin smart软件,编辑自己的PLC程序(这里以一个简单的启保停程序为例), 如下图所示,打开Wincc Flexible smart V4触摸屏软件,新建…

双指针 (C/C++)

1. 双指针 双指针算法的核心思想&#xff1a;将暴力解法的时间复杂度&#xff0c;通常是O(N*N)&#xff0c;通过某种特殊的性质优化到O(N)。 做题思路&#xff1a;先想想暴力解法的思路&#xff0c;然后分析这道题的特殊性质&#xff0c;一般是单调性。然后得出双指针算法的思路…

微信协议网页版微信协议解析

最近在做个微信机器人&#xff0c;所以研究了网页版的微信协议及相关接口&#xff0c;在这里简单总结一下。从表面上看&#xff0c;对于网页版微信我们的使用流程是这样的&#xff1a;很简单&#xff0c;只有四步&#xff0c;但如果细化到内里细节的话&#xff0c;上面这简单四…

一文带你快速入门zabbix6.0的日常操作

文章目录前言一. zabbix基本操作入门1.1 登录和配置用户1.1.1 登录zabbix1.1.2 防爆力破解机制1.1.3 创建用户1.1.4 创建报警媒介1.1.5 设置 权限选项卡1.1.6 设置用户的访问主机权限1.2 新建主机1.2.1 添加主机1.2.2 关于添加的信息注释1.3 新增监控项1.3.1 添加监控项1.3.2 配…

若依系统如何集成qq邮件发送【超详细,建议收藏】

若依系统的部署博主就不在这儿阐述了&#xff0c;默认大家的电脑已经部署好了若依系统&#xff0c;这里直接开始集成邮件系统&#xff0c;首先我们得需要对qq邮箱进行配置&#xff1b;一套学不会你来打我&#x1f600;&#xff1b; 一、开启我们的qq邮箱发送邮件的配置 1、先进…

Qt音视频开发16-通用悬浮按钮工具栏的设计

一、前言 通用悬浮按钮工具栏这个功能经过了好几个版本的迭代&#xff0c;一开始设计的时候是写在视频控件widget窗体中&#xff0c;当时功能简单就放一排按钮在顶部悬浮widget中就好&#xff0c;随着用户需求的变化&#xff0c;用户需要自定义悬浮条的要求越发强烈&#xff0…

K_A12_031 基于STM32等单片机驱动TEMT6000环境光传感器 串口与OLED0.96双显示

K_A12_031 基于STM32等单片机驱动TEMT6000环境光传感器 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCTEMT6000环境光传感器模块1.2、STM32F103C8T6TEMT6000环境光…