[POI2001]Goldmine
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的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- WC2021 题目清单
Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...
- 【POI2001】【HDU1814】和平委员会
题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...
- COGS:313. [POI2001] 和平委员会
313. [POI2001] 和平委员会 ★★☆ 输入文件:spo.in 输出文件:spo.out 评测插件时间限制:1 s 内存限制:128 MB 题目描述 根据宪法,Bytelan ...
- POI2001 Gold mine(二叉排序树 黑书经典)
采矿(KOP) 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定送他一块长方形地.长度为S,宽度为W.老师傅可以自己选择这块地.显然其中包含的采金点越多越好.你的任务就是计算最多能得到多 ...
- POI2001 金矿
问题描述 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ,宽度为 W 的区域奖励给他(1 ≤ s , w ...
- BZOJ2948 : [Poi2001]绿色游戏
维护一个保护集合$S$,表示哪些点$A$可能胜利. 首先将所有绿点加入$S$. $1.$对于一个不在$S$的$A$点,若它存在某个后继在$S$中,则将其加入$S$. $2.$对于一个不在$S$的$B$ ...
- [POI2001]和平委员会
题目描述 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: 每个党派都在委 ...
- [POI2001]Peaceful Commission
题目大意: 有n个国家要派代表开会,每个国家有两个代表可供选择. 有m对代表有仇,不能同时开会. 若每个国家只能派一个代表开会,问是否存在一种方案,使得每个国家都能正常参会? 如果有,输出字典序最小的 ...
随机推荐
- 公布Java桌面程序
我拿了一份桌面工具的开源码,修改动改,在elipse上执行.感觉良好.但到了公布应用程序,就傻眼了. 我竟然不知道咋公布! 呵呵,不愧是Java小白. 假设是微软阵营,直接就编译成exe了. 但jav ...
- [Unit Testing] Mock an HTTP request using Nock while unit testing
When testing functions that make HTTP requests, it's not preferable for those requests to actually r ...
- Behavioral模式之Chain of Responsibility模式
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止. 2.别名 无 3.动机 考虑一个图形用户界面 ...
- Android中个人推崇的数据库使用方式
手机应用开发中常常会使用到数据库存储一些资料或者进行数据缓存,android中为我们提供了一个轻量的数据库.在上层进行了一层封装,同一时候还为我们提供了ContentProvider的框架.方便我们进 ...
- LoadRunner 比较字符串是否相等
int strcmp ( const char *string1, const char *string2 );大小写敏感.int stricmp ( const char *string1, con ...
- Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动、停止、重新启动
Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动.停止.重新启动 能够通过"netstat ...
- Cocos2d-X-3.0 之后的版本的环境搭建
Cocos2d-X-3.0 之后的版本的环境搭建 由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> ...
- python3 base64模块代码分析
#! /usr/bin/env python3 """Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data ...
- 在CentOS上把MySQL从5.5升级到5.6
在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程. 1. 概述 在我做的一个项目中,最近我对生产服务器上的 ...
- 连接sql2008时报错
最近把公司的项目搭建到本地(周末回家要加班),可是连接后,发现程序后台出错,错误信息:不支持此服务器版本.目标服务器必须是 SQL Server 2000 或更高版本. 本地是SqlServer200 ...