• 二维差分矩阵


    输入一个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 个整数,表示所有操作进行完毕后的最终矩阵。

    数据范围

    1n,m10001≤n,m≤1000,
    1q1000001≤q≤100000,
    1x1x2n1≤x1≤x2≤n,
    1y1y2m1≤y1≤y2≤m,
    1000c1000−1000≤c≤1000,
    10001000−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
    #include<iostream>//
     
    using namespace std;//
     
    const int N=1e3+10;//
     
    int a[N][N],b[N][N];//a,b
     
    int n,m,q;//n行m阵 + q
     
    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;
    }//加1
     
    int main()
    {
      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]);//模n用scanf
     
      for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
          insert(i,j,i,j,a[i][j]);//
     
      while(q--)//理q
      {
        int x1,y1,x2,y2,c;//标 +
        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];//
     
      for(int i=1;i<=n;i++)
      {   for(int j=1;j<=m;j++) printf("%d ",b[i][j]);//
         puts("");
      }
      return 0;
    }
    备注:
    1.  DeBug过程中的出现PE问题,主要是输出格式的问题(空格、回车没有处理好);
       后面出现了一个内存限制的问题,但是重新提交以后就消失了,目前没有很好的解决办法;

     2.关于这个板子的话,最重要的代码块就是insert函数,以及后面对差分矩阵的处理

     
  • 相关阅读:
    屏蔽浏览器的脚本错误提示
    服务器定时重启计划任务
    卖程序的小女孩(转)
    会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它。
    Sesion空框架跳到登陆js
    poj 1679 The Unique MST (次小生成树 模版)
    hdu 3488 Tour (km 二分图 最小权)
    sdut 2401 最大矩形面积
    poj 3422 Kaka's Matrix Travels (最大费用流(最小费用最大流)+++拆点)
    博弈论 简介
  • 原文地址:https://www.cnblogs.com/WAsbry/p/13584968.html
Copyright © 2020-2023  润新知