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

【模板】二维差分

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;
}
#二维差分#
全部评论

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
11-28 16:00
已编辑
武汉理工大学 Java
想干测开的tomca...:这份简历是“短期项目硬堆中大型系统技术”的“技术炫技式造假模板”,槽点密集到能当反面教材: ### 1. 「项目时长」和「技术密度」严重脱节,造假痕迹焊死在简历上 两个项目时长分别是**3个月、2个月**,但堆了Spring AI、Elasticsearch、MinIO、Kafka、ShardingSphere、Docker、Sentinel等近20个中大型项目才用的技术——正常情况下,光把这些中间件的文档看完+环境搭好,3个月都不够,更别说实现“AI多轮对话、分库分表、RBAC权限、大模型调用”这些功能。 说白了:你这不是“做项目”,是把“后端技术栈清单”往项目里硬塞,明摆着“只调用了API,没碰过核心逻辑”。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务