0
点赞
收藏
分享

微信扫一扫

想跨境出海?云手机提供了一种可能性

承蒙不弃 2024-05-14 阅读 9

#差分

差分和前缀和互为逆运算:
 差分的用途:

#一维差分

 ##实战演练

//c++代码示例
#include <iostream>
using namespace std ;

const int N = 100001 ;
int n,m ;
int s[N],h[N] ;


void add(int c,int l,int r)
{
    h[l] += c ;
    h[r+1] -= c ;
}
//示例1
int main()
{
    scanf("%d%d",n,m) ;
    
    for (int i = 1 ; i <= n ; i++)
    {
        scanf("%d",&s[i]) ;
    }
    
    for (int i = 1 ; i<= n ; i++)
    {
        add(s[i],i,i) ;
    }

    while (m--)
    {
        int l,r,c ;
        scanf("%d%d%",&l,&r,&c) ;
        add(c,l,r) ;
    }

    for (int i = 1 ; i<= n ; i++)
    {
        h[i] += h[i-1] ;
        printf("%d ",h[i]) ;
    }
    return 0 ;
}
//示例2
int main()
{
    cin >> n >> m ;
    for (int i = 1 ; i<=n ; i++)
    {
        cin >> s[i] ;
        h[i] = h[i] - h[i-1] ;
    }
    
    while (m--)
    {
        int l,r,c ;
        cin >> l >> r >> c ;
        h[l] += c ;
        h[r+1} -= c ;
    }

    for (int i = 1 ; i <= n ; i++)
    {
        h[i] = h[i] + h[i - 1] ;
        cout << h[i] << " " ;
    }
    return 0 ;
}
//python代码示例

n,m = map(int,input().split())

s = [map(int,input().split())]
h = [0] * (len(s))
h[0] = s[0]

for i in range(1,n):
    h[i] = h[i] - h[i-1]

for _ in range(m):
    l,r,c = map(int,input().split())
    h[l] += c
    h[r+1] -= c

for i in range(1,n):
    h[i] = h[i] + h[i - 1]
    print(h[i],end = " ")
    

#二维差分

 ##实战演练

##代码示例

#总结

举报

相关推荐

0 条评论