Poj

$Description$

在一个二维平面上,有$N$颗草,每颗草的大小是$1*1$,左下角坐标为$x_i,y_i$.要求一个正方形,正方形的边平行于$x$或$y$轴,正方形里面包含至少$C$颗草.求正方形的最小边长.注意,同一个区域可能生长多颗草.

数组范围:$1<=N,C<=500\ 1<=x_i,y_i<=10000$

$Sol$

最简单暴力的方法当然就是枚举正方形的一个顶点,就定为左上顶点叭,然后再从小到大枚举边长,然后$check()$,更新答案.显然这个方法复杂度爆炸$qwq$,而且,$check()$要用到二位前缀和,而根据$x,y$的范围,这根本就存不下.

1.虽然$x,y$的范围很大,但是$N$只有$500$鸭,所以就离散化!

2.发现合法的边长是单调的.如果当前边长可以,那么更大的显然也可以,所以二分就好了.

觉得这里的离散化好妙.jpg

特别要注意$lowerbound()$和$upperbound()$的区别吖!

$Code$

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
using namespace std;
il int read()
{
Rg int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=;
int n,c,as,b[N*],ct,sum[N*][N*];
struct node{int x,y;}a[];
il bool ck(int qvq)
{
if(qvq>=b[ct])return ;
Rg int ovo=upper_bound(b+,b+ct+,b[ct]-qvq+)-b-;
go(i,,ovo)
go(j,,ovo)
{
Rg int x=upper_bound(b+,b+ct+,b[i]+qvq-)-b-,y=upper_bound(b+,b+ct+,b[j]+qvq-)-b-;
if(sum[x][y]-sum[i-][y]-sum[x][j-]+sum[i-][j-]>=c)return ;
}
return ;
}
int main()
{
c=read(),n=read();
go(i,,n)a[i].x=read(),a[i].y=read(),b[++ct]=a[i].x,b[++ct]=a[i].y;
sort(b+,b+ct+);ct=unique(b+,b+ct+)-(b+);b[++ct]=;
go(i,,n)
{
Rg int x=lower_bound(b+,b+ct+,a[i].x)-b,y=lower_bound(b+,b+ct+,a[i].y)-b;
sum[x][y]++;
}
go(i,,ct)go(j,,ct)sum[i][j]+=sum[i-][j]+sum[i][j-]-sum[i-][j-];
Rg int l=,r=,mid;
while(l<=r)
{
mid=(l+r)>>;
if(ck(mid))as=mid,r=mid-;
else l=mid+;
}
printf("%d\n",as);
return ;
}

最新文章

  1. Java EE之数据库连接与插入
  2. 003-常用的Meta标签写法和作用
  3. ActiveMQ_Topic队列(三)
  4. CSS hack 汇总
  5. iOS 两种易混淆的存储路径
  6. I.MX6 SHT20 Linux 驱动移植
  7. Codeigniter MongoDB类库
  8. jQuery1.9.1--结构及$方法的工作原理源码分析
  9. input单选框全选与反选
  10. zoj 1508 poj 1201 Intervals
  11. webpack打包非模块化js
  12. Audio Unit 基础
  13. P5304 [GXOI/GZOI2019]旅行者
  14. 必备Linux命令和C语言基础
  15. 洛谷P4841 城市规划 [生成函数,NTT]
  16. Linux安装yum
  17. Android学习之基础知识二(build.gradle文件详解)
  18. Ionic App之国际化(3) json数组的处理
  19. codeforces445A
  20. [转]C++中vector使用详细说明

热门文章

  1. HDU3844 Mining Your Own Business
  2. 3d爱心代码
  3. H3C 早期以太网技术介绍
  4. zoj 2338 The Towers of Hanoi Revisited
  5. 2011年NOIP普及组复赛题解
  6. Python--day61--Django ORM单表操作之展示用户列表
  7. 浅谈Python Django框架
  8. UVA 1025 &quot;A Spy in the Metro &quot; (DAG上的动态规划?? or 背包问题??)
  9. linux flags 参数
  10. 【HTML/CSS】BFC