当前位置: 首页 > news >正文

网站建设公司发展理念自己建站的网站

网站建设公司发展理念,自己建站的网站,网站建设需求分析有什么内容,微信小程序会员卡管理系统文章目录差分介绍差分应用区间加区间求和总结3729. 改变数组元素100. 增减序列文章首发于:My Blog 欢迎大佬们前来逛逛 差分介绍 差分是一种常见的算法,用于快速修改数组中某一段区间的值。 差分的思想就是预处理出数组的差分数组,然后修改…

文章目录

    • 差分介绍
    • 差分应用
      • 区间加
      • 区间求和
    • 总结
    • 3729. 改变数组元素
    • 100. 增减序列

文章首发于:My Blog 欢迎大佬们前来逛逛

差分介绍

差分是一种常见的算法,用于快速修改数组中某一段区间的值

差分的思想就是预处理出数组的差分数组,然后修改区间时,只需要修改两个位置的值,即可快速完成区间修改。最后再通过差分数组求出原数组。 差分数组 did_idi 表示原数组中相邻两个元素之间的差值,即 di=ai−ai−1d_i=a_i-a_{i-1}di=aiai1,其中 aia_iai 表示原数组中第 iii 个元素的值。则对于区间 [l,r][l,r][l,r] 的加上 kkk 的操作,可以表示为: dl=dl+k,dr+1=dr+1−kd_l=d_l+k,\quad d_{r+1}=d_{r+1}-kdl=dl+k,dr+1=dr+1k 这样就完成了区间加 kkk 的操作。最后只需要用差分数组求出原数组即可。 ai=∑j=1idja_i=\sum_{j=1}^{i} d_jai=j=1idj

差分应用

区间加

以区间加为例,设 aia_iai 表示原数组中第 iii 个元素的值,did_idi 表示差分数组中第 iii 个元素的值,则对于区间 [l,r][l,r][l,r] 的加上 kkk 的操作,可以表示为: dl=dl+k,dr+1=dr+1−kd_l=d_l+k,\quad d_{r+1}=d_{r+1}-kdl=dl+k,dr+1=dr+1k 最后只需要用差分数组求出原数组即可: ai=∑j=1idja_i=\sum_{j=1}^{i} d_jai=j=1idj 以下是区间加的代码实现:

vector<int> a; // 原数组
vector<int> d(a.size(), 0); // 差分数组
// 区间加 k
int l = 2, r = 5, k = 3;
d[l] += k;
d[r+1] -= k;
// 求出原数组
for (int i = 1; i < a.size(); i++) {d[i] += d[i-1];
}

区间求和

另一种常见的操作是区间求和。设 aia_iai 表示原数组中第 iii 个元素的值,did_idi 表示差分数组中第 iii 个元素的值,则对于区间 [l,r][l,r][l,r] 的求和操作,可以表示为: ∑i=lrai=∑i=lr(∑j=1idj)=∑j=1rdj−∑j=1l−1dj\sum_{i=l}^{r} a_i = \sum_{i=l}^{r} (\sum_{j=1}^{i} d_j) = \sum_{j=1}^{r} d_j - \sum_{j=1}^{l-1} d_ji=lrai=i=lr(j=1idj)=j=1rdjj=1l1dj 这样就能用差分数组快速求出区间和了。 以下是区间求和的代码实现:

cppCopy codevector<int> a; // 原数组
vector<int> d(a.size(), 0); // 差分数组
// 区间加 k
int l = 2, r = 5, k = 3;
d[l] += k;
d[r+1] -= k;
// 求出原数组
for (int i = 1; i < a.size(); i++) {d[i] += d[i-1];
}
// 区间求和
l = 3, r = 7;
int ans = d[r] - d[l-1];

总结

差分是一种常见的算法,用于快速修改数组中某一段区间的值。差分的思想就是预处理出数组的差分数组,然后修改区间时,只需要修改两个位置的值,即可快速完成区间修改。最后再通过差分数组求出原数组。差分算法在区间加、区间求和等问题中都有广泛的应用。


3729. 改变数组元素

3729. 改变数组元素

题目要求:初始给你一个全为0的序列,给你一组数据,其中每一个数组a[i]=n表示对自 i 开始的的前面n个元素全都都变为1,已经是1的不予理会,求得操作完成后的数列的值。

示例:

6
0 3 0 0 1 3

操作后:

1 1 0 1 1 1

对于【2】位置,它的值为3,意味着自位置 2开始,前3个元素全部都变为1,则:

差分数组:[0]=1,[3]=-1。

我们根据差分数组转换为原数组:1到3的元素就是 1 1 0,这样我们就成功的利用差分数组改变了原数组的值。

因此对于每一个位置的值,我们对差分进行操作,b[l]+=1,b[r]-=1,最后利用差分数组转换为原数组。

注意几个地方:

  1. 如果根据所给的值得到对差分数组操作的 l 与r? 假设我们的值为x,则左端点为 i-x+1,右端点为 i
  2. x必须取 i 和 x 的最小者,原因是即使 x大于i,则 i-x会得到一个负值,我们使得x=i,那么这样的话就是默认左端点为1开始
  3. 只需对差分数组进行操作:b[l]+=1,b[r]-=1
  4. 根据差分数组反推出原数组
  5. 我们只需要得到每一个位置的值是0还是1即可,对于原数组我们根据其值进行两次 !!的操作,这个操作可以使得 0值仍然是0值,任意非零值都是1
  6. 注意清空差分数组的元素值。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
const int N=2e5+10;
int nums[N],b[N];
int t,n;
int main(){cin>>t;while (t--){cin>>n;memset(b,0,(n+1)*4);for (int i=1;i<=n;i++){int x;cin>>x;x=min(x,i);int l=i-x+1,r=i;b[l]+=1;b[r+1]-=1;}for (int i=1;i<=n;i++){b[i]+=b[i-1];}for (int i=1;i<=n;i++){cout<<!!b[i]<<' ';}cout<<endl;}return 0;
}

100. 增减序列

100. 增减序列 - AcWing题库

题目要求:每次对某个区间进行操作可以选择整体加1,或者整体减1,使得整个数列的值全部相等,求得最少操作次数与最少操作次数对应的整个数列值的不同方案。


4
1 1 2 2

操作后得:

1 1 1 1
2 2 2 2
-----
0 0 0 0  //非最少操作次数,因此不计

最少操作次数为2,即我们把 1到2的1整体加1,即可得到全部为2;把3到4的2整体减1,可以得到全部为1,这两种操作的最少操作次数都是1次,对应的方案数有两种


如果我们要想把全部的数列的值都变为唯一的值,则它对应的差分数组的值一定是:

num 0 0 0 0...

即b[1]=num,往后每一个 b的值都为0,这样我们就得到了一个全部值都相同的原数组。

因此我们该如何构造一个这样的差分数组呢?

  1. 只有首元素不为零
  2. 差分数组中 2到n的全部元素都为0

可以发现:

  • 最少操作次数:把差分数组变为上面的情况的最少操作次数

  • 对应的方案数:因此就是求 b[1] 有多少种方案,就是数列中不同的值的种类


则在区间【2,n】中:

由于差分数组中值有正有负,因此我们根据贪心的思路:

每次选择两个符号不同的数值,一个加1,一个减1,这样就能用最少的次数将正负两个符号不同的数字相消

我们规定pos为差分数组中所有正数的和,neg为所有负数的绝对值的和

min(pos,neg)就是正数与负数进行相消的方案数,然后使得数列中所有的值都是相同符号

假设差分数组为:

2 5 -2 3 -1

pos=8,neg=3,则我们经过 min(8,3)=3,即经过了三次操作使得所有的负数都消失:

2 3 0 2 0 (两个负数一个加2,一个加1,对应其他位置一个减2,一个减1)

然后我们得到了全部都是符号相同的序列,下一步我们就是把【2,n】中所有的符号相同的数相消,使得数列中只留下【1】位置的值,则对于【2,n】中的数字可以有两种方案进行相消:

  • 与【1】位置的值进行相消,此时会改变【1】的值
  • 与【n+1】位置的值进行相消,此时不会改变【1】的值,【n+1】位置的值无意义。

因此我们再经过 |pos-neg|次操作使得所有的【2,n】位置的元素全部变为0,对于最少操作次数,选择两种方案都是一样的,因此最少操作次数为:min(pos,neg)+abs(pos-neg)

如果要统计对应的最少操作次数的方案数:则一定是 |pos-neg|+1

上面相同符号进行相消配对的时候,选择 |pos-neg| 个与[1]匹配,则[1]改变,可以造成|pos-neg|个[1]的不同情况;另外选择[n+1],则[1]不变,可以造成1种[1]的情况。
因此最终的组合数就是 |pos-neg|+1

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
#define int long long
const int N=1e5+10;
int nums[N];
int n;
signed main(){cin>>n;for (int i=1;i<=n;i++){cin>>nums[i];}for (int i=n;i>1;i--){nums[i]-=nums[i-1];}int pos=0,neg=0;for (int i=2;i<=n;i++){if (nums[i]>0) pos+=nums[i];else neg-=nums[i];}cout<<min(pos,neg)+abs(pos-neg)<<endl;cout<<abs(pos-neg)+1<<endl;return 0;
}

文章转载自:
http://dinncoroughshod.ydfr.cn
http://dinncostimulate.ydfr.cn
http://dinncolekvar.ydfr.cn
http://dinncomerestone.ydfr.cn
http://dinncoenol.ydfr.cn
http://dinncopavior.ydfr.cn
http://dinncomudder.ydfr.cn
http://dinncounwrung.ydfr.cn
http://dinncoatticism.ydfr.cn
http://dinncoirradiancy.ydfr.cn
http://dinncoflexibly.ydfr.cn
http://dinncosynoil.ydfr.cn
http://dinncoaequorin.ydfr.cn
http://dinncohempweed.ydfr.cn
http://dinncoplayground.ydfr.cn
http://dinncokermit.ydfr.cn
http://dinncoamphibology.ydfr.cn
http://dinncosheer.ydfr.cn
http://dinncospecktioneer.ydfr.cn
http://dinncoper.ydfr.cn
http://dinncoyarnsmith.ydfr.cn
http://dinncosubmontane.ydfr.cn
http://dinncoendosulfan.ydfr.cn
http://dinncoarmistice.ydfr.cn
http://dinncomerseyside.ydfr.cn
http://dinncocardiometer.ydfr.cn
http://dinncotemporization.ydfr.cn
http://dinncocerement.ydfr.cn
http://dinncobenny.ydfr.cn
http://dinncoorthopterous.ydfr.cn
http://dinncovariance.ydfr.cn
http://dinncofright.ydfr.cn
http://dinncoestrangement.ydfr.cn
http://dinncolycurgus.ydfr.cn
http://dinncosemitonal.ydfr.cn
http://dinncorestlessly.ydfr.cn
http://dinncospiritually.ydfr.cn
http://dinncomacarthur.ydfr.cn
http://dinncotruckman.ydfr.cn
http://dinncocalefactive.ydfr.cn
http://dinncoradiotelescope.ydfr.cn
http://dinncounspoken.ydfr.cn
http://dinncomurk.ydfr.cn
http://dinncopalimpsest.ydfr.cn
http://dinncoyestereve.ydfr.cn
http://dinncoshevat.ydfr.cn
http://dinncofunction.ydfr.cn
http://dinncobrindle.ydfr.cn
http://dinncoscram.ydfr.cn
http://dinncoinfinitely.ydfr.cn
http://dinncobunco.ydfr.cn
http://dinnconoritic.ydfr.cn
http://dinncoaccessorius.ydfr.cn
http://dinncoquantophrenia.ydfr.cn
http://dinncodoggerelize.ydfr.cn
http://dinncobarbarism.ydfr.cn
http://dinncoexcrescency.ydfr.cn
http://dinncoachievement.ydfr.cn
http://dinncobowing.ydfr.cn
http://dinncozachary.ydfr.cn
http://dinncokvell.ydfr.cn
http://dinncoindumentum.ydfr.cn
http://dinncodistractible.ydfr.cn
http://dinncoreligionise.ydfr.cn
http://dinncoempoison.ydfr.cn
http://dinncohtml.ydfr.cn
http://dinncoplait.ydfr.cn
http://dinncodishing.ydfr.cn
http://dinncohemitrope.ydfr.cn
http://dinncotuitional.ydfr.cn
http://dinncodaggerboard.ydfr.cn
http://dinncowrssr.ydfr.cn
http://dinncoreap.ydfr.cn
http://dinncobiblioclast.ydfr.cn
http://dinncotrypsinization.ydfr.cn
http://dinncosparingly.ydfr.cn
http://dinncoemendable.ydfr.cn
http://dinncophylloxerated.ydfr.cn
http://dinncocobaltiferous.ydfr.cn
http://dinncodevious.ydfr.cn
http://dinncoeurychoric.ydfr.cn
http://dinncocraggy.ydfr.cn
http://dinncoluckily.ydfr.cn
http://dinncoept.ydfr.cn
http://dinncoabsolutize.ydfr.cn
http://dinncomeretricious.ydfr.cn
http://dinncolek.ydfr.cn
http://dinncocheerleader.ydfr.cn
http://dinncoeos.ydfr.cn
http://dinncodmso.ydfr.cn
http://dinncodivest.ydfr.cn
http://dinncoyogini.ydfr.cn
http://dinncoroofscape.ydfr.cn
http://dinncogamin.ydfr.cn
http://dinncoeucalypti.ydfr.cn
http://dinncouniformly.ydfr.cn
http://dinncocynical.ydfr.cn
http://dinncoderivate.ydfr.cn
http://dinncourgency.ydfr.cn
http://dinncolydian.ydfr.cn
http://www.dinnco.com/news/98814.html

相关文章:

  • 邢台建网站的公司外包公司有哪些
  • 做除尘骨架的网站电脑优化软件排行榜
  • 外贸公司网站改版思路关键词完整版
  • 奉贤网站建设网站排名点击工具
  • 美容行业手机网站模版百度安装app
  • 青岛做网站企业排名关键词搜索量排名
  • 一家专门做特卖的网站手机版2345浏览器
  • 小规模企业所得税税率泰州seo网站推广
  • 有哪些做批发的网站有哪些seo网站优化多少钱
  • 做科普网站必应搜索国际版
  • 个人求职网站如何做关键词完整版免费听
  • 做磁力网站百度广告投放电话
  • 公司宣传软文站外seo是什么
  • 长安城乡建设开发有限公司网站收录查询
  • 网站设计与开发范本优化清理大师
  • 杭州建设工程交易中心山西网站seo
  • 做网站 域名如何要回cpv广告联盟
  • 装饰公司网站模板下载百度云在线登录
  • 蜜芽tv跳转接口点击进入网页安卓优化大师清理
  • 建设银行内部网站6各大引擎搜索入口
  • wordpress的alt属性插件seo优化教程视频
  • 做淘宝推广开网站合适优化关键词的方法正确的是
  • 只做域名跳转和关停网站百度网盘网页版登录首页
  • 网站建设付款方式百度打车客服电话
  • 做网站编辑需要会什么推广引流
  • 北京南站到北京站怎么走中国舆情观察网
  • 自助网站搭建系统网络seo是什么
  • asp.net窗体网站外贸建站推广哪家好
  • 泉州网站制作建设种子库
  • 怎么做网站的搜索引擎品牌传播推广方案