zoukankan      html  css  js  c++  java
  • AcWing 798.差分矩阵

    AcWing 798.差分矩阵

    题目描述

    输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。

    每个操作都要将选中的子矩阵中的每个元素的值加上c。

    请你将进行完所有操作后的矩阵输出。

    输入格式

    第一行包含整数n,m,q。

    接下来n行,每行包含m个整数,表示整数矩阵。

    接下来q行,每行包含5个整数x1, y1, x2, y2, c,表示一个操作。

    输出格式

    共 n 行,每行 m 个整数,表示所有操作进行完毕后的最终矩阵。

    数据范围

    1≤n,m≤1000,
    1≤q≤100000,
    1≤x1≤x2≤n,
    1≤y1≤y2≤m,
    −1000≤c≤1000,
    −1000≤矩阵内元素的值≤1000

    输入样例

    3 4 3
    1 2 2 1
    3 2 2 1
    1 1 1 1
    1 1 2 2 1
    1 3 2 3 2
    3 1 3 4 1
    

    输出样例

    2 3 4 1
    4 3 4 1
    2 2 2 2
    

    题目思路

    用差分思想解决,每次都对差分数组进行操作,降低复杂度
    每一个a坐标都是b矩阵中上方与左方所形成的矩阵之和,
    每次都对b矩阵进行操作

    #include<iostream>
    using namespace std;
    const int N = 1e3+10;
    int a[N][N],b[N][N];
    
    void insert(int x1,int y1,int x2,int y2,int c)
    {
        b[x1][y1] += c;
        b[x2+1][y1] -= c;
        b[x1][y2+1] -= c;
        b[x2+1][y2+1] += c;
    }
    
    int main()
    {
        int n,m,q;
        scanf("%d%d%d",&n,&m,&q);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                scanf("%d",&a[i][j]);
                insert(i,j,i,j,a[i][j]);
            }
        int x1,y1,x2,y2,c;
        while(q--)
        {
            scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&c);
            insert(x1,y1,x2,y2,c);
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                b[i][j] = b[i-1][j] + b[i][j-1] - b[i-1][j-1] + b[i][j];
                printf("%d ",b[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    htmilunit-- 针对抓取js生成的数据
    httpClient get方式抓取数据
    post方式的数据抓取
    利用win10自带的系统配置禁止开机启动项和程序
    linq中怎么实现多条件关联的左右连接
    win10提示管理员已阻止你运行此应用,如何强制运行
    远程连接SQL Server 2014遇到的问题和解决
    eclipse中删除多余的tomcat server
    resultMap之collection聚集
    empty()和remove()的区别
  • 原文地址:https://www.cnblogs.com/fsh001/p/12248695.html
Copyright © 2011-2022 走看看