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. 分治 FFT

    为啥要叫分治\(fft\)啊,又用不到\(fft--\) 给定长度为\(n-1\)的数组\(g[1],g[2],--,g[n-1]\),求\(f[1],f[2],--,f[n]\),其中 \[f[i] ...

  2. 记录libreoffice实现office转pdf(适用于windows、linux)

    由于目前的工作跟office打交道比较多,所以才有了此篇blog,需求是实现word转换pdf方便页面展示.之前lz采用的是jacob(仅支持windows)进行转换的,但是现在服务器改成linux显 ...

  3. js获取url参数值的方法总结

    1.方式一:通过字符串截取的方式获取参数值: 1).函数一:获取URL中的参数名及参数值的集合 /** * [获取URL中的参数名及参数值的集合] * 示例URL:http://htmlJsTest/ ...

  4. EJB学习

    EJB:企业级JavaBean(Enterprise JavaBean, EJB)是一个用来构筑企业级应用的服务器端可被管理组件. EJB主要有三种Bean: Session Beans: 会在单个特 ...

  5. RPA中房产证的 OCR 识别

    客户需求,识别一些证件内容,包括身份证.户口本.营业执照.银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 RPA 还是百度的 OCR 都有接口,直接调用即可,但是都没有房产证的 OCR 识别,只 ...

  6. WebSocket数据加密——AES与RSA混合加密

    前言 之前在写“一套简单的web即时通讯”,写到第三版的时候没什么思路,正好微信公众号看到一篇讲API交互加密,于是就自己搞了一套AES与RSA混合加密,无意中产生应用在WebSocket想法,好在思 ...

  7. 【git】代码回退指定commit

    [注意:如果提交的错误代码较少,可以在本地修改成 commit之前的正确代码样子,然后再提交一次即可.不用麻烦的操作回滚.] 开发人员错误将代码提交到gitlab的远程dev分支,回滚方法如下: 1. ...

  8. Java学习笔记 jar包获取当前路径

    情况 使用一个jar包,需要下载一个文件到与当前jar包同目录,如何去获取此目录? 代码 使用.即可作为当前的目录 windows环境下,我的jar包所在的目录为D:\test val dir = F ...

  9. ls用法

    常用 ll -h  大小直接显示K,M,G 语 法:ls [-1aAbBcCdDfFgGhHiklLmnNopqQrRsStuUvxX][-I <范本样式>][-T <跳格字数> ...

  10. 终于我还是没忍住,用Python爬了一波女神

    你学爬虫,最终不还是为了爬妹子 啥也不说,开始福利赠送~ 女神大会 不是知道有多少人知道“懂球帝”这个 APP(网站),又有多少人关注过它的一个栏目“女神大会”,在这里,没有足球,只有女神哦. 画风是 ...