首页 > 编程语言 >差分算法总结

差分算法总结

时间:2023-11-27 23:46:08浏览次数:40  
标签:总结 int d% 矩阵 差分 算法 y1 y2

差分是前缀和的逆运算

一维差分

对于a1,a2,…,an,构造b1,b2,…,bn,使得ai = b1 + b+ … + bi。此时,b数组成为a数组的差分,a数组称为b数组的前缀和。

题目链接:

https://www.acwing.com/problem/content/799/

代码模版:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 100010;
 6 
 7 int n, m, x;
 8 int b[N];
 9 
10 void insert(int l, int r, int c)
11 {
12     b[l] += c;
13     b[r + 1] -= c;
14 }
15 
16 int main()
17 {
18     scanf("%d%d", &n, &m);
19     for (int i = 1; i <= n; i++)
20     {
21         scanf("%d", &x);
22         insert(i, i, x);
23     }
24     
25     while (m--)
26     {
27         int l, r, c;
28         scanf("%d%d%d", &l, &r, &c);
29         insert(l, r, c);
30     }
31     
32     for (int i = 1; i <= n; i++)
33     {
34         b[i] += b[i - 1];
35         printf("%d ", b[i]);
36     }
37     
38     return 0;
39 }
View Code

 

二维差分

原矩阵为A = (aij)n*m,差分矩阵为= (bij)n*m,使得矩阵A是差分矩阵B的前缀和。

初始化:令矩阵A = O,那么矩阵= O。然后把矩阵A中的每个元素依次插入。

题目链接:

https://www.acwing.com/problem/content/800/

代码模版:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 1010;
 6 
 7 int n, m, q, x;
 8 int b[N][N];
 9 
10 void insert(int x1, int y1, int x2, int y2, int c)
11 {
12     b[x1][y1] += c;
13     b[x2 + 1][y1] -= c;
14     b[x1][y2 + 1] -= c;
15     b[x2 + 1][y2 + 1] += c;
16 }
17 
18 int main()
19 {
20     scanf("%d%d%d", &n, &m, &q);
21     
22     for (int i = 1; i <= n; i++)
23         for (int j = 1; j <= m; j++)
24         {
25             scanf("%d", &x);
26             insert(i, j, i, j, x);
27         }
28         
29     while (q--)
30     {
31         int x1, y1, x2, y2, c;
32         scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
33         insert(x1, y1, x2, y2, c);
34     }
35     
36     for (int i = 1; i <= n; i++)
37     {
38         for (int j = 1; j <= m; j++)
39         {
40             b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
41             printf("%d ", b[i][j]);
42         }
43         puts("");
44     }
45     
46     return 0;
47 }
View Code

 

标签:总结,int,d%,矩阵,差分,算法,y1,y2
From: https://www.cnblogs.com/ykycode/p/17860848.html

相关文章

  • 第十四周 Linux课后技术总结
    2.3Vim编辑器安装Vim使用yum-yinstallvim-enhancedVim常用命令......2.4文件时间查看文件时间2.5文件类型看第一个字符,开头为-的是普通文件,开头为d的是目录文件(蓝色)。......
  • O(nlogn)排序算法
    排序算法介绍常见时间复杂度为\(O(nlogn)\)的排序算法1.快速排序分治思想#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[N];voidquick_sort(intl,intr){if(l>=r)return;intx=a[l+r>>1],i=l-1,j=r+1;......
  • 每日总结
    今日收获完成了软件设计的作业;写了一部分的软件构造的实验;晚上又改了改自己的flash作业~~~之后就复习六级啦~~~明天预计复习英语六级;继续写实验;课堂顺利通过~~~......
  • DFS算法的非递归遍历分析
    两种写法,一个是边表顶点号全部压栈,一个是类似后序非递归遍历1、voidDFS(GraphG,inti){intp,w;StackS;InitStack(S);Push(S,i);visited[i]=true;while(!isEmpty(S)){Pop(S,p);printf("%d",G.Ver[p].num);......
  • 2023/11/26 星期日 每日总结 Day10
    今日份的英语:晚上睡觉前看看吧今日份的算法:没太有思路,第一想到的是暴力解法,却忽略了数学在算法思想中的重要性。当暴力解法的时间复杂度过高时,可以使用数学的思想转化一下,得出一个结论或者公式,这样就便于代码的编写。今日份的SQL今日份的八股今日份的锻炼:今日份的阅读今日......
  • 11.27 erp系统博客总结
    在开发企业Erp中,我担任了财务这一模块的开发,在最近的一周里,我开发了erp系统的销售订单模块,主要完成订单的添加,订单的管理等功能.1.订单新增2.订单管理 ......
  • 2023.11.27——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.javaGUI2.百度翻译SDK明日计划:学习......
  • 11.27每日总结
    今天本来要验收但是老师说不能用组队的C#来替代C/S结构的实验,于是利用一下午的时间通过查询完成了一个用java+swing的C/S结构的软件。 ......
  • 每日总结-23.11.27
    packageInterface;importgongneng.BackGroundPanel;importgongneng.FileTest;importgongneng.selfData;importjavax.imageio.ImageIO;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import......
  • linux基础总结
    Linux操作系统作为一种开源、强大且灵活的操作系统,广泛用于服务器、嵌入式设备以及个人计算机。对于初学者来说,了解Linux的基础知识是踏上学习Linux之旅的第一步。1.Linux的文件系统在Linux中,一切皆文件。文件系统是Linux的核心组成部分之一,它以层次结构的方式组织文件和目录。......