原理:
差分即该顶点减去该区域内
即可利用 二维前缀和 及 一维差分知识
类比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]所在行:
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;