【题目链接】

      http://poj.org/problem?id=3179

  【参考】

      http://www.cnblogs.com/evenbao/p/9243183.html

  【算法】

  1. 二分答案+判定
  2. 二维坐标的离散化去除不存在草的行和列
  3. 二维前缀和
  4. lower_bound (>=) upper_bound (>)

  

 #include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
struct data{int x,y;}a[];
int c,n,tot,i,j,tx,ty;
int rec[][],b[];
void discrete()
{
sort(b+, b+tot+);
tot = unique(b+, b+tot+) - b - ;
for(i = ; i <= n; i++) {
tx = lower_bound(b+,b+tot+,a[i].x) - b;
ty = lower_bound(b+,b+tot+,a[i].y) - b;
rec[tx][ty]++;
}
b[++tot] = ;
for(i = ; i <= tot; i++)
for(j = ; j <= tot; j++)
rec[i][j] = rec[i-][j] + rec[i][j-] - rec[i-][j-] + rec[i][j];
}
bool valid(int cur)
{
int p;
if(cur >= b[tot]) { return true; }
p = upper_bound(b+, b+tot+, b[tot]-cur+) - b - ;
for(i = ; i <= p; i++) {
for(j = ; j <= p; j++) {
tx = upper_bound(b+, b+tot+, b[i]+cur-) - b - ;
ty = upper_bound(b+, b+tot+, b[j]+cur-) - b - ;
if(rec[tx][ty] - rec[i-][ty] - rec[tx][j-] + rec[i-][j-] >= c) return true;
}
}
return false;
}
int main()
{
scanf("%d%d", &c, &n);
for(i = ; i <= n; i++)
scanf("%d%d", &a[i].x, &a[i].y),
b[++tot] = a[i].x, b[++tot] = a[i].y;
discrete();
int l = , r = ;
while(l<r) {
int mid = (l + r) >> ;
if(valid(mid)) r = mid;
else l = mid + ;
}
printf("%d\n", l);
return ;
}

poj_3179 Corral the Cows (二分+二维前缀和+离散化)的更多相关文章

  1. Acwing-121-赶牛入圈(二分, 二维前缀和,离散化)

    链接: https://www.acwing.com/problem/content/123/ 题意: 农夫约翰希望为他的奶牛们建立一个畜栏. 这些挑剔的畜生要求畜栏必须是正方形的,而且至少要包含C单 ...

  2. Gym 102091L Largest Allowed Area 【二分+二维前缀和】

    <题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...

  3. cf1073c 二分+二维前缀和

    #include<bits/stdc++.h> using namespace std; #define maxn 200005 char s[maxn]; ][maxn]; map< ...

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

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

  5. [CSP-S模拟测试]:physics(二维前缀和+二分+剪枝)

    题目传送门(内部题26) 输入格式 第一行有$3$个整数$n,m,q$.然后有$n$行,每行有一个长度为$m$的字符串,$+$表示正电粒子,$-$表示负电粒子.然后有$q$行,每行$2$个整数$x,y ...

  6. C - Monitor CodeForces - 846D (二维前缀和 + 二分)

    Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started ...

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

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

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

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

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

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

随机推荐

  1. hadoop中yarn

    一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善Map ...

  2. Pytorch详解NLLLoss和CrossEntropyLoss

    是什么? https://www.cnblogs.com/marsggbo/p/10401215.html 具体pytorch怎么运算的 https://blog.csdn.net/qq_222102 ...

  3. mysql 语句积累

    show tables; 显示表 DROP TABLE IF EXISTS emp;删除表

  4. 进阶:python3实现 插入排序

    一图胜千言,插入排序的核心逻辑如下: 将数据分成两半,前一半是已排好序的,后一半是待排序的 每次取后一半中的第一个数,在已排序的一半中,逆序依次比较,找到要插入的位置 记录插入的位置,在最后判断是否需 ...

  5. idea 打包model 为jar包

    1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...

  6. uva live 7638 Number of Connected Components (并查集)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. react 类样式的一些使用方法

    在 css类不想使用穿透的状态,可以再webpack配置  modules:true,它位于css-loader下,此外调用css的类时可能会自动生成一个hash值,这时候如果想显示本来的名字,可以打 ...

  8. 【opencv使用笔记】一:Python版本安装与测试

    安装完opencv3.4.1并且Cmake后,发现Python不能import,又装了Python版本的opencv; 由于是在conda环境下安装,opencv-python-4.0.1.24,最终 ...

  9. Django路由小知识

    from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/200 ...

  10. python值的引用传递和go语言的值传递

    一:值传递 实参a 原本指向地址 1638212,代表1638212这个地址的值是3.在swap函数中,实参a将值拷贝给形参a,形参a此时也在内存中拥有地址,地址= xxxx,值为3,在所有的函数体内 ...