二维差分模板 [USACO19FEB]Painting The Barn S(洛谷 P5542)

[USACO19FEB]Painting The Barn S

题目描述

农夫约翰不擅长多任务处理。他经常分心,很难完成长的项目。目前,他正试图在谷仓的一侧上漆,但他一直在画小矩形区域,然后由于照料奶牛的需要而偏离了方向,使得谷仓的某些部分上漆的涂料比其他部分多。

我们可以将谷仓的一侧描述为一个二维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层油漆覆盖的区域。


这道题一看就是二维差分,我的二维差分模板复制一下,发现样例都没过????

这个时候我开始怀疑我想法是不是错了,看了题解发现也是二维差分,但是好像跟我的写法不太一样;再次怀疑是不是我的板子错了,但是不太可能啊,写过这种题目的;

然后发现我的模板是左上角和右下角,这道题是左下角和右上角,一度怀疑这有问题;

最后的最后才发现,这道题给的是点的坐标,而模板是小格子坐标,只要左下角坐标加1就行;

总结:二维差分对于给的点是左上右下还是左下右上没有任何区别,但是要特别注意是点坐标还是格子坐标;

代码:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,LL>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值