Description

Byteman作为Byteland的The Goldmine(某一公司厂矿)的最有功的雇员之一,即将在年末退休。为了表示对他的

认真勤恳的工作的承认,The Goldmine的管理层愿意奖励他一小块长方形的矿地,此矿地长和宽为s和w且平行于坐

标系统的轴线。长方形矿地的位置可由他自己选。当然,这块地的价值会随着位置的不同而不同。其价值是指这块

区域内天然金矿石的数量(若矿石位于这块地的边缘,我们同样认为他是属于这个区域的)。你们的任务是计算出

这块地的最大可能价值(即:为它选择最佳位置)。为简便起见,我们假定整个金矿的矿区是无穷的,但含有天然

金矿石的区域却是有限的。

要求

写一程序:

1、 读入天然金矿石的位置;

2、 计算这块地的最大可能价值(即:求给定大小的这块地所含的天然金矿石的最大数);

3、 输出结果

Input

第一行为俩正整数s、w,1<=s,w<=10 000,各自代表着此矩形区域平行X轴和Y轴的边的长度。第二行是一正整数n

,1<=n<=15 000,它表示此金矿矿区内天然矿石的数量。接下来的n行,每行为俩用单个空格隔开的整数x、y,-30

000<=x,y<=30 000,它门分别表示了某一天然金矿石的X坐标和Y坐标。

Output

应恰有一整数,表示此块给定大小的矿地的最高价值。

Sample Input

1 2

12

0 0

1 1

2 2

3 3

4 5

5 5

4 2

1 4

0 5

5 0

2 3

3 2

Sample Output

4


这题同样可以用到扫描线的思想

对于每个矿点,它可以向上下左右四个方向延伸,但这并不代表每个点就要考虑四个方向

考虑下如果该点往下有一个最优解,那么下面的某个点必定有向上的最优解,所以我们只考虑每个矿点的两个方向

扫描线在扫描的过程中,如果有矿区离它的距离超过了s(长),就把它踢掉,扫到的点加进来,点在加进来的时候向上方延伸w(宽),操作完之后取\(max\)即可

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=1.5e4,limit=3e4;
struct AC{
int x,y;
void join(){x=read(),y=read();}
bool operator <(const AC &a)const{return x<a.x;}
}A[N+10];
struct Segment{
#define ls (p<<1)
#define rs (p<<1|1)
int tree[limit*8+10],Lazy[limit*8+10];
void add_tag(int p,int v){Lazy[p]+=v,tree[p]+=v;}
void pushdown(int p){
if (!Lazy[p]) return;
add_tag(ls,Lazy[p]),add_tag(rs,Lazy[p]);
Lazy[p]=0;
}
void updata(int p){tree[p]=max(tree[ls],tree[rs]);}
void change(int p,int l,int r,int x,int y,int t){
if (x<=l&&r<=y){
add_tag(p,t);
return;
}
int mid=(l+r)>>1;
pushdown(p);
if (x<=mid) change(ls,l,mid,x,y,t);
if (y>mid) change(rs,mid+1,r,x,y,t);
updata(p);
}
}T;
int main(){
int s=read(),w=read(),n=read(),ans=0;
for (int i=1;i<=n;i++) A[i].join();
sort(A+1,A+1+n);
for (int i=1,j=1;i<=n;i++){
while (A[j].x<A[i].x-s) T.change(1,-limit,limit,A[j].y,min(A[j].y+w,limit),-1),j++;
//踢掉过远的点
T.change(1,-limit,limit,A[i].y,min(A[i].y+w,limit),1);//加进当前的点,向上延伸
ans=max(ans,T.tree[1]);
}
printf("%d\n",ans);
return 0;
}

[POI2001]Goldmine的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. WC2021 题目清单

    Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...

  3. 【POI2001】【HDU1814】和平委员会

    题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...

  4. COGS:313. [POI2001] 和平委员会

    313. [POI2001] 和平委员会 ★★☆   输入文件:spo.in   输出文件:spo.out   评测插件时间限制:1 s   内存限制:128 MB 题目描述 根据宪法,Bytelan ...

  5. POI2001 Gold mine(二叉排序树 黑书经典)

    采矿(KOP) 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定送他一块长方形地.长度为S,宽度为W.老师傅可以自己选择这块地.显然其中包含的采金点越多越好.你的任务就是计算最多能得到多 ...

  6. POI2001 金矿

    问题描述 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ,宽度为 W 的区域奖励给他(1 ≤ s , w ...

  7. BZOJ2948 : [Poi2001]绿色游戏

    维护一个保护集合$S$,表示哪些点$A$可能胜利. 首先将所有绿点加入$S$. $1.$对于一个不在$S$的$A$点,若它存在某个后继在$S$中,则将其加入$S$. $2.$对于一个不在$S$的$B$ ...

  8. [POI2001]和平委员会

    题目描述 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: 每个党派都在委 ...

  9. [POI2001]Peaceful Commission

    题目大意: 有n个国家要派代表开会,每个国家有两个代表可供选择. 有m对代表有仇,不能同时开会. 若每个国家只能派一个代表开会,问是否存在一种方案,使得每个国家都能正常参会? 如果有,输出字典序最小的 ...

随机推荐

  1. 如何扩展ArcGIS中的元数据编辑器

    http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...

  2. [PythonCode]扫描局域网的alive ip地址

    内网的主机都是自己主动分配ip地址,有时候须要查看下有那些ip在使用,就写了个简单的脚本. linux和windows下都能够用,用多线程来ping1-255全部的地址,效率不高.2分钟左右. 先凑合 ...

  3. Visual Studio VS如何卸载Visual assistant

    1 点击工具-扩展管理器   2 选中Visual Assist X,点击卸载即可.                            

  4. Nerv --- React IE8 兼容方案

    创建项目 创建一个目录,使用npm快速初始化 $ mkdir my-project && npm init -y 安装依赖 安装webpack以及babel $ npm install ...

  5. ICONFONT在APP中的使用

    阿里IconFont平台 http://www.iconfont.cn/ 这里是阿里巴巴UED部门开发的IconFont平台,眼下阿里系的重量级产品都在使用,里面有非常多资源可供使用. 这里说说怎样在 ...

  6. POJ 1061 青蛙的约会(扩展GCD求模线性方程)

    题目地址:POJ 1061 扩展GCD好难懂.. 看了半天.最终把证明什么的都看明确了. .推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> ...

  7. .NET中lock的使用方法及注意事项[转]

    标准-->ms官方: http://msdn.microsoft.com/zh-cn/library/c5kehkcz(v=vs.90).aspx A.为什么不要 "lock(this ...

  8. Vi/Vim查找替换使用方法【转】

    原文地址:http://wzgyantai.blogbus.com/logs/28117977.html vi/vim 中可以使用 :s 命令来替换字符串.该命令有很多种不同细节使用方法,可以实现复杂 ...

  9. MSMQ消息队列的安装、启用

    最近研究消息队列,先从微软自带的MSMQ开始,百度如何安装,方式如下: 控制面板---程序和功能--启用和关闭windows功能--Microsoft Message Queue(MSMQ)服务器 默 ...

  10. 2016/05/25 empty() 与 isset()的区别

    对于初学php的人来说,empty()和和isset()用法的区别是很难搞清楚的,他们的用法的差别不仔细去琢磨的话确实很难弄清楚. 先说一下他们的共同点: 都可以判定一个变量是否为空: 都返回bool ...