题解 | #【模板】二维差分#

【模板】二维差分

https://www.nowcoder.com/practice/50e1a93989df42efb0b1dec386fb4ccc

// 记得在外围添加一圈0,差分可能会导致越界访问
// 初始模板一定要是全零,将初始数据以差分的形式添加,不能直接添加,会出错
// 详细看 61~67 行

// 添加一个数的差分:
//
//      -------------------
//      |(a,b)+k          |(a,d+1)-k
//      |                 |
//      |                 |
//      |            (c,d)|
//      |-----------------|
//       (c+1,b)-k          (c+1,d+1)+k
//

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

vector<vector<ll>> metrix;
vector<ll> arr;

ll n , m , q;

void metrix_set(ll a , ll b , ll c , ll d , ll e)
{
    metrix[a][b] += e;
    metrix[c+1][b] -= e;
    metrix[a][d+1] -= e;
    metrix[c+1][d+1] += e;
    return;
}

void metrix_build()
{
    for(ll i=1 ; i<=n ; i++)
    {
        for(ll j=1 ; j<=m ; j++)
        {
            metrix[i][j] += metrix[i][j-1] + metrix[i-1][j] - metrix[i-1][j-1];
        }
    }

    return;
}

int main()
{
    metrix.clear();
    scanf("%lld%lld%lld" , &n , &m , &q);
    fflush(stdin);

    metrix.resize((n+2) , vector<ll>((m+2) , 0));

    // n行 [0...n-1] --> [1...n]
    for(ll i=1 ; i<=n ; i++)
    {
        // m列 [0...m-1] --> [1...m]
        for(ll j=1 ; j<=m ; j++)
        {
            // scanf("%lld" , &metrix[i][j]);       ----------------> 初始模板一定要是全零,将初始数据以差分的形式添加,不能直接添加,会出错
            ll x;
            scanf("%lld" , &x);
            metrix_set(i , j , i , j , x);
        }
    }

    while(q--)
    {
        ll a , b , c , d , e;
        scanf("%lld%lld%lld%lld%lld" , &a , &b , &c , &d , &e);
        metrix_set(a , b , c , d , e);
    }

    metrix_build();

    for(ll i=1 ; i<=n ; i++)
    {
        for(ll j=1 ; j<=m ; j++)
        {
            printf("%lld " , metrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}
#二维差分#
全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务