【蓝桥杯集训2】差分专题(3 / 4)

news2024/11/24 8:38:17

目录

差分模板

1、一维差分

2、二维差分

3729. 改变数组元素 - 差分 + 区间修改

100. 增减序列 - 


差分模板

1、一维差分

活动 - AcWing

给a数组 [l,r] 区间的每个数+c,只需要给其差分数组b做如下操作即可

b[l]+=c;
b[r+1]-=c;

差分数组\large b\left [ i \right ]=a\left [ i \right ]-a\left [ i-1 \right ]

a[]是b[]的前缀和数组

如果我们要给a数组【l , r】区间都+c   即 a[l]+c , a[l+1]+c …… a[r]+c

  • 首先给 b[l]+c 则    b[l]+c , b[l+1]+c ...... b[r]+c
  • 然后给 b[r+1] - c 则   b[r+1]-c , b[r+2]-c ...... b[n]-c
  • 先给b[l]+c 则a数组的红色区域都会+c
  • 再给b[r+1]-c 则a数组的绿色区域都会-c
  • 从而达到只给区间 [l,r]+c 的目的
import java.util.*;

public class Main
{
    static int N=(int)1e5+10;
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(),k=sc.nextInt();
        int[] a=new int[N];
        int[] b=new int[N];
        for(int i=1;i<=n;i++)
        {
            a[i]=sc.nextInt();
            b[i]=a[i]-a[i-1]; //构造差分数组
        }
        int l,r,c;
        while(k-->0)
        {
            l=sc.nextInt();
            r=sc.nextInt();
            c=sc.nextInt();
            b[l]+=c;
            b[r+1]-=c;
        }
        for(int i=1;i<=n;i++)
        {
            a[i]=a[i-1]+b[i]; //b的前缀和是a
            System.out.print(a[i]+" ");
        }
    }
}

2、二维差分

活动 - AcWing

 

import java.util.*;

class Main
{
    static int N=1010;
    static int[][] a=new int[N][N],b=new int[N][N];

    public static void work(int x1,int y1,int x2,int y2,int c)
    {
        b[x1][y1]+=c;
        b[x2+1][y1]-=c;
        b[x1][y2+1]-=c;
        b[x2+1][y2+1]+=c;
    }

    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(),m=sc.nextInt(),t=sc.nextInt();

        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                a[i][j]=sc.nextInt();
                work(i,j,i,j,a[i][j]);
            }

        while(t-->0)
        {
            int x1=sc.nextInt(),y1=sc.nextInt(),x2=sc.nextInt(),y2=sc.nextInt(),c=sc.nextInt();
            work(x1,y1,x2,y2,c);           
        }

        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
                System.out.print(b[i][j]+" ");
            }
            System.out.println();
        }
    }
}

3729. 改变数组元素 - 差分 + 区间修改

3729. 改变数组元素 - AcWing题库

题目:

思路:

 初始化b数组(也就是题目中的v数组)全为0

对于每一个ai:

  • 如果ai=0,则说明不对区间进行操作,跳过
  • 如果ai>=i,则说明要把i之前包括i的所有元素都置为1,我们将这段区间+1标记上
  • 如果ai<i,则说明i之前包括i一共ai个元素都置为1,将这段区间标记+1

如果bi>0,说明被标记过,进行过换一操作(多次操作仍然为1),因此输出1

如果bi==0,说明没有被操作过,则输出0

import java.util.*;

class Main
{
    static int N=200010;
    static int[] b=new int[N];
    
    public static void work(int l,int r)
    {
        b[l]++;
        b[r+1]--;
    }
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        
        while(t-->0)
        {
            int n=sc.nextInt();
            Arrays.fill(b,0);
            for(int i=1;i<=n;i++)
            {
                int x=sc.nextInt();
                if(x==0) continue;
                if(x>=i) work(1,i); //如果ai大于目前数组所包含的元素个数,则把i前面所有的元素都置为1
                else work(i-x+1,i); //否则将i前(包括i)的x个数置为1
            }
            for(int i=1;i<=n;i++) b[i]+=b[i-1];
            for(int i=1;i<=n;i++)
            {
                if(b[i]==0) System.out.print(0+" "); //如果操作非0,则说明发生过交换,则该位为1
                else System.out.print(1+" ");
            }
            System.out.println();
        }
    }
}

 

100. 增减序列 - 

活动 - AcWing

题目:

思路:

 

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

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

相关文章

倒计时100天 | DBF深圳国际户外运动博览会5月一起狂飙初夏

狂飙初夏的大型户外运动嘉年华即将登场&#xff01;2023年5月26日至28日&#xff0c;第四届DBF深圳国际户外运动博览会&#xff08;简称DBF深圳户外展&#xff09;将于深圳国际会展中心&#xff08;宝安&#xff09;举办。本届展会展览面积超过7万平方米&#xff0c;预计将吸引…

保姆级Vue3+Vite项目实战黑白模式切换

写在前面注&#xff1a;本文首发掘金签约专栏&#xff0c;此为文章同步&#xff01;本文为 Vue3Vite 项目实战系列教程文章第四篇&#xff0c;系列文章建议从头观看效果更佳&#xff0c;大家可关注专栏防走失&#xff01;点个赞再看有助于全文完整阅读&#xff01;此系列文章主…

C/C++【内存管理】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 Love is a choice. It is a conscious commitment. It is something you choose to make work every day with a person who has chosen the same thi…

商城系统必备营销工具(五)——积分商城

做商城&#xff0c;流量必不可少&#xff0c;日活跃度也很重要。现在各大APP、网站、小程序和微商城&#xff0c;基本都在为了巩固流量做积分商城&#xff0c;虽然已经随处可见&#xff0c;但很多企业商家却并没有将积分商城运作起来&#xff0c;积分商城也没有人浏览兑换商品。…

跟ChatGPT,聊聊ChatGPT

不仅“上知天文、下知地理”&#xff0c;似乎还能对答如流、出口成诗&#xff0c;甚至还能写剧本、编音乐、写代码——最近&#xff0c;一款名叫ChatGPT的人工智能聊天机器人火爆全球。由此&#xff0c;一系列关于新一代技术变革、人工智能替代人力、巨头企业扎堆入局AI的讨论在…

Multi Paxos

basic paxos 是用于确定且只能确定一个值&#xff0c;“只确定一个值有什么用&#xff1f;这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。 原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念&…

ChatGPT国内镜像站试用,聊天、Python代码生成。

ChatGPT国内镜像站试用&#xff0c;聊天、Python代码生成。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… …

前端开发:关于diff算法详解

前言 前端开发中&#xff0c;关于JS原生的内容和前端算法相关的内容一直都是前端工作中的核心&#xff0c;不管是在实际的前端业务开发还是前端求职面试&#xff0c;都是非常重要且必备的内容。那么本篇博文来分享一个关于前端开发中必备内容&#xff1a;diff算法&#xff0c;d…

ChatGPT背后的技术可以给数据治理带来哪些神奇的效果?_光点科技

最近&#xff0c;由美国人工智能研究室OpenAI开发的全新“聊天机器人”ChatGPT火了。作为一款人工智能语言模型&#xff0c;它不仅能和人展开互动&#xff0c;还可以写文章、制定方案、创作诗歌&#xff0c;甚至编写代码、检查漏洞样样精通&#xff0c;上线仅两个月全球活跃用户…

Python雪花代码

前言 用python画个雪花玩玩&#xff0c;源码在文末公众号哈。 雪花类 class Snow(): #雪花类 def __init__(self): self.r 6 #雪花的半径 self.x ra.randint(-1000,1000) #雪花的横坐标 self.y ra.randint(-500,5…

剑指 Offer 10- I. 斐波那契数列[c语言]

目录题目思路代码结果该文章只是用于记录考研复试刷题题目 力扣斐波那契数列 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 …

卷积神经网络-D2L

从全连接层到卷积 企业级理解卷积 不稳定输入 稳定输出 求系统存量 - 信号系统周围像素点如何产生影响 - 图像处理一个像素点如何试探 - 图像识别 好处&#xff1a; 平移不变性和局部性 图像卷积 import torch from torch import nn from d2l import torch as d2ldef try_…

Java高频面试题,ReentrantLock 是如何实现锁公平和非公平性的?

我先解释一下个公平和非公平的概念。 公平&#xff0c;指的是竞争锁资源的线程&#xff0c;严格按照请求顺序来分配锁。 非公平&#xff0c;表示竞争锁资源的线程&#xff0c;允许插队来抢占锁资源。 ReentrantLock 默认采用了非公平锁的策略来实现锁的竞争逻辑。 其次&…

SqlServer的LDF文件丢失, 如何仅用MDF文件恢复数据库呢?(已解决)

笔者的一个大小为2 TB的SQL Server的database的LDF文件在玩存储盘映射的过程中莫名其妙的丢失了. 好在MDF文件还在. 笔者慌了, Bruce Ye告诉笔者, 不用着急, 光用MDF也可以把数据库弄回来的. 笔者就问Bruce, 假设我可以容忍LDF中信息的丢失的话, 那么该如何恢复这个数据库呢?我…

快速搭建个人在线书库,随时随地畅享阅读!

前边我们利用NAS部署了个人的导航页、小说站、云笔记&#xff0c;今天&#xff0c;我们再看看怎么部署一个个人的在线书库。 相信很多朋友都在自己的电脑中收藏了大量的PDF、MOBI等格式的电子书籍&#xff0c;但是一旦换了一台设备&#xff0c;要么是无法翻阅&#xff0c;要么…

如何为报表开发工具 FastReport .NET 设置 Apache 2 Web 服务器?

FastReport .NET是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。专业版和企业版包括Fast…

FortiTalk | “三英论安全”之OT安全热门话题解读

OT安全热门话题解读 在数字化转型时代&#xff0c;OT/IT融合已经成为主旋律&#xff0c;可能很多人还没有意识到“工厂”已经不是以前的“工厂”。从封闭走向互联、从现场走向远程、从手动走向自动&#xff0c;这种变革带来的不仅是便捷和效率&#xff0c;更潜藏着巨大的网络安…

【数据结构】基础:图的最短路径问题(附C++源码)

【数据结构】基础&#xff1a;图的最短路径问题&#xff08;附C源码&#xff09; 摘要&#xff1a;将会在数据结构专题中开展关于图论的内容介绍&#xff0c;其中包括四部分&#xff0c;分别为图的概念与实现、图的遍历、图的最小生成树以及图的最短路径问题。本文介绍图的最短…

LeetCode 105. 从前序与中序遍历序列构造二叉树 -- 数据结构基础

从前序与中序遍历序列构造二叉树 中等 1.9K 相关企业 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], i…

基于MATLAB的MIMO信道估计(附完整代码与分析)

目录 一. 介绍 二. MATLAB代码 三. 运行结果与分析 一. 介绍 本篇将在MATLAB的仿真环境中对比MIMO几种常见的信道估计方法的性能。 有关MIMO的介绍可看转至此篇博客&#xff1a; MIMO系统模型构建_唠嗑&#xff01;的博客-CSDN博客 在所有无线通信中&#xff0c;信号通过…