前缀和与差分的统一性与差异性

前缀和基本模型
       
    给定一序列n,求从区间[x,y]内数字的和;

    做法:
             1.预处理序列

            2.s[x—y]=s[y]-s[x-1];// 注意s[n]当中包括了a[n]
for(i=1;i<=n;i++){ 
    s[i]=s[i-1]+a[n]; 
}//预处理 
for(i=1;i<=m;i++){ 
    scanf("%d%d",&x,&y); 
    printf("%d",s[y]-s[x-1]); 
}

差分基本模型
        
        给定一段序列,让区间[x,y]中数字加上k,操作m次,求在操作后序列的某个值
 
a[0]=0; for(i=1;i<=n;i++){ s[i]=a[i]-a[i-1]; } for(i=1;i<=m;i++){     scanf("%d%d%d",&x,&y,&k); s[x]+=k; s[y+1]=-k;
}

for(j=1;j<=x;j++){
     sum+=s[j];     
    printf("%d",sum);
}
差异性:
前缀和;对已给定序列中[x,y]区间进行求和;
差分;对已知序列进行加减一数的操作,求操作后序列某个数;


统一性:
差分将已给区间的数进行转化b[n]存a[n]-a[n-1]的值
于是将求原来区间 某个数转化为求b[n]的前缀和,大大减小时间复杂度,从n^2变为2n;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值