http://acm.hdu.edu.cn/showproblem.php?pid=6514

题意

给出一个大矩形(\(nm\leq10^7\)),有p个矩形覆盖,然后有q次询问,询问指定矩形内是否覆盖完全

题解

  • 扫描线?
  • 因为不用修改,所以差分前缀和就好,注意重复覆盖点需要重新赋值
  • \(n*m \leq 10^7\),二维数组一维化,一维化后一定要严格判边界,不然会导致访问混乱

代码

#include<bits/stdc++.h>

using namespace std;
int a[20000000],n,m,X1,X2,Y1,Y2,q;
int id(int x,int y){
return x*(m+1)+y;
}
void ud(int x,int y,int v){
if(x>n||y>m)return;
int p=id(x,y);
a[p]+=v;
} int qy(int x,int y){
return a[id(x,y)];
} int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)a[id(i,j)]=0;
scanf("%d",&q);
while(q--){
scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2);
ud(X1,Y1,1);ud(X2+1,Y1,-1);ud(X1,Y2+1,-1);
ud(X2+1,Y2+1,1);
}
/*cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){cout<<a[id(i,j)]<<" ";}
cout<<endl;
}*/
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[id(i,j)]+=a[id(i-1,j)]+a[id(i,j-1)]-a[id(i-1,j-1)];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[id(i,j)])a[id(i,j)]=1;
//cout<<a[id(i,j)]<<" ";
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[id(i,j)]+=a[id(i-1,j)]+a[id(i,j-1)]-a[id(i-1,j-1)];
}
}
scanf("%d",&q);
while(q--){
scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2);
int tp=a[id(X2,Y2)]-a[id(X2,Y1-1)]-a[id(X1-1,Y2)]+a[id(X1-1,Y1-1)];
if(tp==(X2-X1+1)*(Y2-Y1+1))puts("YES");
else puts("NO");
}
}
}

hdu6514 一维化 + 二维前缀和的更多相关文章

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

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

  2. 二维前缀和好题hdu6514

    #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ]; )* ...

  3. Memento Mori (二维前缀和 + 枚举剪枝)

    枚举指的是枚举矩阵的上下界,然后根据p0, p1, p2的关系去找出另外的中间2个点.然后需要记忆化一些地方防止重复减少时间复杂度.这应该是最关键的一步优化时间,指的就是代码中to数组.然后就是子矩阵 ...

  4. 洛谷P1719 最大加权矩形 (DP/二维前缀和)

    题目描述也没啥好说的,就是给你个你n*n的矩形(带权),求其中最大权值的子矩阵. 首先比较好想的就是二维前缀和,n<=120,所以可以用暴力. 1 #include<bits/stdc++ ...

  5. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  6. COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)

    题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...

  7. poj-3739. Special Squares(二维前缀和)

    题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. ...

  8. Good Bye 2015 C. New Year and Domino 二维前缀

    C. New Year and Domino   They say "years are like dominoes, tumbling one after the other". ...

  9. 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

    题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...

随机推荐

  1. npm 命令 --save 和 --save-dev 的区别

    回顾 npm install 命令 我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面这几种命令形式: 1 2 3 4 5 6 7 npm install moduleName ...

  2. 新手入门:python的pip安装(二)

    pip的安装以及使用pip安装包 —–安装python的时候勾选了下载pip,不知道为什么没下载.然后就偷懒想着需要哪个包再单独去下载就好了,然后!!!每个包都会出点小问题,导致我这个初学者有三天不想 ...

  3. js forEach参数详解,forEach与for循环区别,forEach中如何删除数组元素

     壹 ❀ 引 在JS开发工作中,遍历数组的操作可谓十分常见了,那么像for循环,forEach此类方法自然也不会陌生,我个人也觉得forEach不值得写一篇博客记录,直到我遇到了一个有趣的问题,我们来 ...

  4. window.onload在文档加载完成后执行

    验证a .b两点疑惑: a.<script src="./main.js"></script>中的window.onload是在html全部加载完了才执行, ...

  5. MySQL字符类型学习笔记

    目录 一.字符集和字符编码 1.1.字符集 1.2.字符编码 二.字符集排序规则 2.1.排序规则定义 2.2 .排序规则特征 三.CHAR和VARCHAR 3.1.CHAR类型 3.2.VARCHA ...

  6. 明解C语言 入门篇 第八章答案

    练习8-1 #include<stdio.h> #define diff(x,y)(x-y) int main() { int x; int y; printf("x=" ...

  7. 【面试】Java中sleep和wait的区别

    1.sleep方法是Thread类的静态方法: wait方法是Object类的成员方法 2.sleep方法使当前线程暂停执行指定的时间,让出cpu给其他线程,但是它的监控状态依然保持着,当指定的时间到 ...

  8. js判断undefined和null

    js判断undefined var exp = undefined; if (typeof(exp) == "undefined") { alert("undefined ...

  9. cl_demo_output=>display 介绍

    Methods of CL_DEMO_OUTPUT PS:自己测试是display后的内表不能带表头. 类CL_DEMO_OUTPUT 在示例程序中创造了很多简单的数据输出的方法而不需要经典的list ...

  10. JQuery操作attr、prop、val()/text()/html()、class属性

    1.1 arr操作   设置单个属性 // 第一个参数:需要设置的属性名 // 第二个参数:对应的属性值 // $obj.attr(name, value); // 用法举例. $('img').at ...