简单差分(这个其实真的容易理解)

eternal风度 eternal风度     2022-10-31     506

关键词:

首先,给出一个问题:

给出n个数,再给出Q个询问,每个询问给出le,ri,x,要求你在le到ri上每一个值都加上x,而只给你O(n)的时间范围,怎么办?

1.如果暴力,卡一下le和ri,随随便便让你T成狗.

2.用线段树或树状数组搞一搞,抱歉,这个复杂度是O(Qlogn)的,还是会T(虽然他们解决别的题目很NB)

3.差分,没错,要入正题了,很高兴O(n)+常数

还是用上面这个题目,假如要在le和ri上全都加一个x,很显然,这个O(n)是不可避免的,既然这样,那我们考虑把O(n*Q)变成O(n+Q).也就是说,在询问中我们不去for来加x,而是做一个标记,最后一起加上

! 现在需要自己动笔模拟一下了 !

1.先另外开一个专门差分的数组(大小=题中的序列长度)

2.假如在3~8的区间上加上5,那我们在差分数组中的3位置上加上一个5(原因暂时不懂没关系,用笔先跟着模拟),再在8+1的位置上减一个5,如此操作完Q次.

3.假如我们只有这一次操作,开始统计答案,运用前置和的思想,cf[i](差分)=cf[i-1]+cf[i].那么你会发现(如果你模拟了的话),在3~8的区间上,你已经使差分数组全部加上了5(推广到所有Q一起统计答案依旧正确)

4.再用O(n)的for把他们加到原序列之中去,输出!

看一下复杂度,果然:O(常数*n).

这个代码应该不难,所以我也就不贴了(其实这算一种思想,没有完全的板子)

会优化,你真的会优化吗?其实你可能真的缺少一份理解数据库篇

...常查询的列创建索引啊什么的,其实都不是大家想的那样简单的,其实它们背后存在很多的东西,值得我们去理解和学习。  和大家分享讨论一个问题吧,子查询和连接查询哪一个查询速度快?最重要的目的是能帮助大家在以... 查看详情

函数指针和指针函数用法和区别

...道该在哪些地方用,这就尴尬了。今天这里只讲两个相对简单的,其实上面说那些太复杂的东西也真的很少用,即便是用了理解起来很麻烦,所以莫不如先深刻理解这两个比较容易的,并且项目中比较常用到。正文先来看看两者... 查看详情

差分and树上差分(代码片段)

...和要讲的没关系qwq进去看了之后是不是觉得看不懂?那我简单概括一下qwq差分数组de定义:记录当前位置的数与上一位置的数的差值.栗子容易发现的是,(sum_1^ib_i)即代表(a_i)的值.((sum_1^i)即代表从1累加到i.)思想看到前面的(sum_1^i)你... 查看详情

差分数组and树上差分(代码片段)

...和要讲的没关系qwq进去看了之后是不是觉得看不懂?那我简单概括一下qwq差分数组de定义:记录当前位置的数与上一位置的数的差值.栗子容易发现的是,(sum_j=1^ib_j)即代表(a_i)的值.((sum)即代表累加.)思想看到前面的(sum)你一定会发... 查看详情

差分时钟dqs与dqm-ddrx的关键技术介绍(上)

...文章来把这些关键技术再给大家介绍一下。   差分时钟技术差分时钟是DDR的一个重要且必要的设计,但大家对CK#(CKN)的作用认识很少,很多人理解为第二个触发时钟,其实它的真 查看详情

接口测试真的有那么难吗?

...部接口和外部接口内部接口:是浏览器与服务器的接口。这个很容易理解,web开发一般分前端和后端,前端开发人员用html/css/javascript等技术。后端开发人员用php/java/python等各种语言。用户输入的数据是输入到前端页面上。怎样... 查看详情

2018.2.7

...evaluation,二是通过写一个toyinterpretater,彻底理解了closure这个东西。我之前还说其实不完全理解closure是啥,结果这下算是真的理解了。什么比自己动手实现一个语言特性能够更好的帮助你理解这个语言特性呢?当然写这个解释... 查看详情

领域模型,你真的理解的了吗?

...动设计(DDD),这两者很容易混淆。以下是我对领域模型这个概念的一些理解。1.领域模型是什么?理论派观点:DomainModel是一个商业建模范畴概念,即使一个企业不开发软件,也 查看详情

简单理解js的this

...感觉对this解释的有点复杂了,因此,本人在此给this一个简单易于理解的定义。  this其实是js的一个对象,至于是什么对象呢?很简单,this这个对象就是:谁调用它它就指向谁。  关于这一点,其实,博客园的文章已经说明... 查看详情

简单理解js的this

...感觉对this解释的有点复杂了,因此,本人在此给this一个简单易于理解的定义。  this其实是js的一个对象,至于是什么对象呢?很简单,this这个对象就是:谁调用它它就指向谁。  关于这一点,其实,博客园的文章已经说明... 查看详情

迪杰斯特拉算法-简单容易理解

1.最短路径算法画一张图:简单首先是连通图,单向连通图 1-4找到最短路径 first-last遍历所有节点 1-所有节点判断,如果有的话前继节点就是1           2,5这个时候我们就需要判断这几个节点2,5但是... 查看详情

面向对象编程思想-简单工厂模式

一、引言简单工厂、工厂方法、抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性。本文介绍一个比较容易理解的模式-简单工厂模式。二、... 查看详情

线程的生命周期,真的没那么简单(代码片段)

...周期问题,线程的生命周期其实没有我们想象的那么简单!本文分享自华为云社区《【高并发】线程的生命周期其实没有我们想象的那么简单!!》,作者:冰河。今天,我们就结合操作系统线程和编... 查看详情

差分隐私(differentialprivacy)定义及其理解

1前置知识本部分只对相关概念做服务于差分隐私介绍的简单介绍,并非细致全面的介绍。1.1随机化算法随机化算法指,对于特定输入,该算法的输出不是固定值,而是服从某一分布。单纯形(simplex):一个$k$维单纯形是指包含$... 查看详情

进程与线程的简单理解

...系统的基本概念,但是它们比较抽象,不容易掌握。举个简单例子:我们在使用计算机的时候,这个操作系统中有很多程序,我们可以打开QQ音乐,可以看新闻,可以聊天,可以下载东西。这些都是计算机中的每一个程序,即进... 查看详情

简单的猜想集

只是一些简单的猜想。#1没有“理性理解”我们对稍微复杂一点的事物的理解,只是通过“感性理解”归结为一个(一些)更基础的、可以直接“感性理解”的事物,然后拒绝进一步深入(这时候往往说“恍然大悟”)。这个归... 查看详情

bjoi2018求和(代码片段)

传送门一道很有意思的题……树上差分系列。这个题一开始就想着怎么用树剖+线段树求和了,然后一想线段树建树是O(nlogn),然后再乘以一个k的50,好像T了……?后来发现这个题其实没有任何修改不需要线段树……完全是可... 查看详情

回调函数的简单理解与实现(代码片段)

回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而... 查看详情