博客
关于我
2020.2.16普及C组 方格纸(square【纪中】【差分】【前缀和】
阅读量:351 次
发布时间:2019-03-04

本文共 1389 字,大约阅读时间需要 4 分钟。

正解:前缀和+二维差分

差分其实就是前缀和的逆运算;

假设有一个数组 a [ 5 ] = 1 , 2 , 3 , 4 , 5 a[5]={1,2,3,4,5} ,它的差分数组 b [ 5 ] = 1 , 1 , 1 , 1 , 1 b[5]={1,1,1,1,1} 。显然,差分数组的每个元素可以通过原数组的相邻元素之差得到,即 b [ i ] = a [ i ] − a [ i − 1 ] b[i]=a[i]-a[i-1] 。因此,我们可以推出,原数组的前缀和等于差分数组的前缀和,这也是为什么说差分就是前缀和的逆运算。

知道了这个,差分还有一个重要的应用:在二维网格中对某个区间进行加数操作,然后问操作后的某个位置的值是多少。这种方法在计算机科学和数据处理领域广泛应用。

二维差分与一维差分的关系

二维差分和一维差分本质上是一样的操作。只不过,我们扩展到了二维网格中。具体来说,对于一个二维网格 x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 ,我们需要对四个角进行赋值,通常是 1 1 − 1 -1 。赋值完成后,我们通过以下代码来计算最终的网格值:

a[x1][y1]++; a[x2+1][y2+1]++; a[x1][y2+1]--; a[x2+1][y1]--;

这样就能完成二维差分操作啦!

代码实现

#include 
#include
#include
#include
using namespace std;long long f[3500][3500], a[3500][3500];long long n, m, x, y, x1, y1, x2, y2;int main() { freopen("square.in", "r", stdin); freopen("square.out", "w", stdout); scanf("%lld", &n); for (int i = 1; i <= n; i++) { scanf("%lld %lld %lld %lld", &x1, &y1, &x2, &y2); a[x1][y1]++; a[x2+1][y2+1]++; a[x1][y2+1]--; a[x2+1][y1]--; } for (int i = 1; i <= 3000; i++) for (int j = 1; j <= 3000; j++) f[i][j] = f[i-1][j] + f[i][j-1] - f[i-1][j-1] + a[i][j]; cin >> m; for (int i = 1; i <= m; i++) { scanf("%lld %lld", &x, &y); printf("%lld\n", f[x][y]); } return 0;}

通过上述代码,我们可以轻松完成二维差分操作,并输出最终的网格值。如果你对具体实现细节感兴趣,可以继续深入研究。

转载地址:http://bjle.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
查看>>
OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
查看>>
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
OpenCV中的监督学习
查看>>
opencv中读写视频
查看>>
opencv之cv2.findContours和drawContours(python)
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>
opencv之模糊处理
查看>>
Opencv介绍及opencv3.0在 vs2010上的配置
查看>>
OpenCV使用霍夫变换检测图像中的形状
查看>>