Monitor HDU 6514 二维差分入门学习

题意

小腾有\(n*m\)的田地,但是有小偷来偷东西,在一片矩形区域上,有一部分区域是监控可以覆盖到的,这部分区域由一个或多个包含于该矩形区域的小矩形构成;现在给你另一个包含在该矩形区域的小矩形A,问你这个小矩形能否被监控完全覆盖。

解题思路

这个题可以模拟做,就是开一个二维数组,把能监控的区域标记为1,否者就是0,然后在给的小矩形内看看这里面1的个数已不是等于小矩形的面积,是的话就是YES,否者就是NO。但是这个方法会超时。我就无能为力了,这时旁白同学说这个题得用二维差分来做(还没学过),神奇,我就找了个博客,有位大佬正好写了这道题,而且很详细,易懂,点我进来

这里我就补充一下自己看过这个博客后的一点见解。

  • 这里建立二维数组,坐标不用像大佬所说的那样转换,就正常那样就行,二维数组可以正常表示,不用把左下改为左上,右上改为右下,这里可能是那位作者想错了。
  • 这里需要使用vector来建立二维数组,要不然会爆,而这里如何用vector来建立二维数组我还真不会,下面代码里见(这个也很重要)。
  • 感觉差分就是树状数组的简洁版。

代码实现

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e7+7;
int n, m, p, q;
int main()
{
int x1, y1, x2, y2;
while(scanf("%d%d", &n, &m)!=EOF)
{
vector< vector<int> > recode(n+2, vector<int>(m+2)), glass(n+2, vector<int>(m+2));
//这里n+2代表第一维的参量,第二个是代表第二维
//这样声明vector后就可以直接使用recode[i][j],只要在范围内就行
//如果使用vector<int> recode[maxm],我们不能直接使用比如recode[2][3],
//因为可能在recode[2][3]之前,并没有数字存储。
scanf("%d", &p);
for(int i=1; i<=p; i++)
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
recode[x1][y1]++;
recode[x2+1][y2+1]++;
recode[x1][y2+1]--;
recode[x2+1][y1]--;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
recode[i][j]+=recode[i-1][j]+recode[i][j-1]-recode[i-1][j-1];
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
glass[i][j]+=glass[i-1][j]+glass[i][j-1]-glass[i-1][j-1] + ( recode[i][j]>0? 1:0);
}
}
scanf("%d", &q);
while(q--)
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
int eara=glass[x2][y2]-glass[x2][y1-1]-glass[x1-1][y2]+glass[x1-1][y1-1];
if(eara==(x2-x1+1)*(y2-y1+1))
{
printf("YES\n");
}
else printf("NO\n");
}
}
return 0;
}

END

Monitor HDU6514 二维差分入门学习的更多相关文章

  1. HDU - 6514 Monitor(二维差分)

    题意 给定一个\(n×m\)的矩阵.(\(n×m <= 1e7\)). \(p\)次操作,每次可以在这个矩阵中覆盖一个矩形. \(q\)次询问,每次问一个矩形区域中,是否所有的点都被覆盖. 解析 ...

  2. 洛谷 P3397 地毯 【二维差分标记】

    题目背景 此题约为NOIP提高组Day2T1难度. 题目描述 在n*n的格子上有m个地毯. 给出这些地毯的信息,问每个点被多少个地毯覆盖. 输入输出格式 输入格式: 第一行,两个正整数n.m.意义如题 ...

  3. NOI 2012 魔幻棋盘 | 二维差分 + 二维线段树

    题目:luogu 2086 二维线段树,按套路差分原矩阵,gcd( x1, x2, ……, xn ) = gcd( xi , x2 - x1 , ……, xn - xn-1 ),必须要有一个原数 xi ...

  4. Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)

     题意是需要求最大的扩散时间,最后输出的是一开始的火源点,那么我们比较容易想到的是二分找最大值,但是我们在这满足这样的点的时候可以发现,在当前扩散时间k下,以这个点为中心的(2k+1)2的正方形块内必 ...

  5. Gym 102028J 扫描线/二维差分 + 解方程

    题意:有一个二维平面,以及n个操作,每个操作会选择一个矩形,使得这个二维平面的一部分被覆盖.现在你可以取消其中的2个操作,问最少有多少块地方会被覆盖? 思路:官方题解简洁明了,就不细说了:https: ...

  6. Codeforces Round #578 (Div. 2) 二维差分 可做模板

    题意: 在n*n的矩阵中,你可以选择一个k*k的子矩阵,然后将这个子矩阵中的所有B全部变为W,问你怎么选择这个子矩阵使得最终的矩阵中某一行全是W或者某一列全是W的个数最多 题解:考虑每一行和每一列,对 ...

  7. 2020ICPC&#183;小米 网络选拔赛第一场 J.Matrix Subtraction (贪心,二维差分)

    题意:给一个\(nXm\)的矩阵,可以选取\(aXb\)的子矩阵,使子矩阵中的所有元素减一,问最后是否能使矩阵中所有元素变为\(0\). 题解:首先贪心,我们看最左上角的元素,如果\(g[1][1]\ ...

  8. 220514 T2 画画 (二维差分)

    首先我们需要特判只涂了一种颜色的情况: (1)k=1,此时答案就是1:(2)k>1,涂的这种颜色肯定不能是第一个,答案是k-1; 对于其他正常情况,我们对于每个颜色找到一个最小的矩形(这个矩形内 ...

  9. HDU-6514 Monitor(二维前缀和+差分)

    http://acm.hdu.edu.cn/showproblem.php?pid=6514 Problem Description Xiaoteng has a large area of land ...

随机推荐

  1. BOM-window

    窗口位置 screenLeft和screenTop screenLeft 和 screenTop 属性,分别用于表示窗口相对于屏幕左边和上边的位置.Firefox 则在screenX 和 screen ...

  2. wepy-数据双向绑定input

    初入wepy,发现wepy和vue神似,但还是有不一样的地方,例如v-model数据双向绑定 场景: 一个input搜索框,用户输入内容,点击“叉叉”按钮,输入的内容全部清空,这是一个很常见的场景 j ...

  3. [原创]PHP代码修正之CodeSniffer

    目录 参考链接 介绍 安装 使用 命令行模式 PHPStorm 让编辑器使用PSR-2标准 集成phpcbf 参考链接 PHP开发规范之使用phpcbf脚本自动修正代码格式 在PhpStorm中使用P ...

  4. layui 表格设置td的宽度

    layui 表格设置td的宽度, td{ min-width: 150px; max-width: 200px; } 超出长度隐藏 overflow: hidden; text-overflow: e ...

  5. vue中的:is

    is string | Object (组件的选项对象) <div id="app"> <span>这是:is的案例</span> <co ...

  6. LTM_本地流量管理(一)

    基本元素及概念 Node:节点,即服务器的IP地址. Member:成员,即一个服务,用IP+端口表示. Pool:池:一个或多个Member的逻辑分组,一个Pool表示一个应用,每个Pool都有自己 ...

  7. mysql DELETE语句 语法

    mysql DELETE语句 语法 作用:用于删除表中的行.广东大理石构件 语法:DELETE FROM 表名称 WHERE 列名称 = 值 mysql DELETE语句 示例 //删除person表 ...

  8. PHP超大文件上传与下载

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  9. Java——常用类(StringBuffer)

    [StringBuffer]   <1>java.lang.StringBuffer代表可变的字符序列. <2>StringBuffer和String类似,但是StringBu ...

  10. Improving Network Management with Software Defined Networking

    Name of article:Improving Network Management with  Software Defined Networking Origin of the article ...