二维差分(笔记)

 原理:

差分即该顶点减去该区域内

即可利用 二维前缀和 及 一维差分知识

类比2 x 2方格

顶点数据a[l,j]

差分一和w[l,j-1]

差分二和w[l-1,j]

二者重叠部分即w[l-1,j-1]

该点差分w[l,j]=a[l,j]-w[l-1,j]-w[l,j-1]+w[l-1,j-1];

类比可得w[l,j]=a[l,j]-a[l-1,j]+a[l,j-1]+a[l-1,j-1];

例题:

题目描述
农夫约翰不擅长多任务处理。他经常分心,很难完成长的项目。目前,他正试图在谷仓的一侧上漆,但他一直在画小矩形区域,然后由于照料奶牛的需要而偏离了方向,使得谷仓的某些部分上漆的涂料比其他部分多。
我们可以将谷仓的一侧描述为一个二维 x-y 平面,农夫约翰在该平面上绘制 n 个矩形,每个矩形的边都与坐标轴平行,每个矩形由谷仓的左下角和右上角点的坐标描述。
农夫约翰想在谷仓上涂几层油漆,这样在不久的将来就不需要再重新粉刷了。但是,他不想浪费时间涂太多的油漆。结果表明, K 涂层是最佳用量。请在他画完所有的长方形后,帮他确定谷仓有多少面积被 K 层油漆覆盖。
输入格式
输入的第一行包含 n k 1≤k≤n≤100000 )。其余 n 行中的每一行包含四个整数 x1 y1 x2 y2 ,描述正在绘制的矩形区域,左下角( x1 y1 )和右上角( x2 y2 )。所有 x y 值都在 0…1000 范围内,并且所有矩形都有正面积。
输出格式
请输出谷仓被 K 层油漆覆盖的区域。
解析:
        如一维差分将区域 [l,r]内数据增加m;将差分 fen[l]+=m(由差分计算原数组可得范围内都要加fen[l]即都加m),并将f en[r+1]-=m(消除 fen[l]+=m对范围外数据所带来的影响),而二维 a[x1,y1], a[x2,y2],将范围内数据 +m:
fen[x1,x2]+=m;
消除影响:
        y1. [x1,x2],x1.[y1,y2]所在行:
                 fen[x1,y2+1]-=m;
                 fen[x2+1,y1]-=m;
        y2.[x1,x2],x2.[y1,y2]所在行:
                fen[x2+1,y2]+=m;
                fen[x2,y2+1]+=m;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值