POI2001 Gold mine(二叉排序树 黑书经典)
采矿(KOP)
金矿的老师傅年底要退休了。经理为了奖赏他的尽职尽责的工作,决定送他一块长方形地。长度为S,宽度为W。老师傅可以自己选择这块地。显然其中包含的采金点越多越好。你的任务就是计算最多能得到多少个采金点。如果一个采金点的位置在长方形的边上,它也应当被计算在内。
任务:
读入采金点的位置。计算最大的价值。
输入:
文件KOP.IN的第一行是S和W,(1<=s,w<=10 000);他们分别平行于OX坐标和OY坐标,指明了地域的尺寸。接下来一行是整数n (1<=n<=15 000),表示采金点的总数。然后是n行,每行两个整数,给出了一个采金点的坐标。坐标范围是(-30 000<=x,y<=30 000)。
输出:
一个整数,最多的采金点数。
样例输入
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
样例输出
4
果然POI的题目真是经典,在看题解时学到了很多的东西 也是从黑书中寻觅到的
运用到的知识很多,却很清晰
其中一些技巧看似很简单却十分巧妙
这时我才感觉到二叉排序树强大之处
#include<cstdio>
#define maxn 15005
#define max(a,b) ((a)>(b)?(a):(b))
int n,m,s,w,num,ans,x[2*maxn],y[2*maxn],yy[2*maxn];
struct {
int y,sum,maxsum;
}t[4*maxn]; void qsX(int,int);
void qsY(int,int);
void buildtree(int);
void ins(int,int,int); int main(){
FILE *in=fopen("kop.in","r");
FILE *out=fopen("kop.out","w");
int i,j,k;
for(i=0;i<=4*maxn-1;i++) t[i].y=-30001;
fscanf(in,"%d%d%d",&s,&w,&n);
for(i=1;i<=n;i++){
fscanf(in,"%d%d",&x[i],&y[i]);
yy[i]=y[i];
yy[n+i]=y[i]+w+1;
}
yy[2*n+1]=-30001;
qsY(1,2*n);
m=0;
for(i=1;i<=2*n;i++)
if(yy[i]!=yy[i+1]) yy[++m]=yy[i];
num=0;
buildtree(1);
qsX(1,n);
i=1;j=1;k=x[j];
while(i<=n&&j<=n){
while(x[i]<=k+s&&i<=n){
ins(1,y[i],1);
ins(1,y[i]+w+1,-1);
i++;
}
if(ans<t[1].maxsum) ans=t[1].maxsum;
while(x[j]==k&&j<=n){
ins(1,y[j],-1);
ins(1,y[j]+w+1,1);
j++;
}
k=x[j];
}
fprintf(out,"%d",ans);
fclose(in);fclose(out);
return 0;
} void qsX(int l,int r){
int i=l,j=r,k=x[(l+r)/2],t;
do{
while(x[i]<k) ++i;
while(x[j]>k) --j;
if(i<=j){
t=x[i];x[i]=x[j];x[j]=t;
t=y[i];y[i]=y[j];y[j]=t;
++i;--j;
}
}while(i<j);
if(i<r) qsX(i,r);
if(j>l) qsX(l,j);
}
void qsY(int l,int r){
int i=l,j=r,k=yy[(l+r)/2],t;
do{
while(yy[i]<k) ++i;
while(yy[j]>k) --j;
if(i<=j){
t=yy[i];yy[i]=yy[j];yy[j]=t;
++i;--j;
}
}while(i<j);
if(i<r) qsY(i,r);
if(j>l) qsY(l,j);
}
void buildtree(int now){
if(2*now<=m) buildtree(2*now);
t[now].y=yy[++num];
t[now].sum=t[now].maxsum=0;
if(2*now+1<=m) buildtree(2*now+1);
}
void ins(int now,int num,int p){
if(num<t[now].y) ins(now*2,num,p);
if(num>t[now].y) ins(now*2+1,num,p);
t[now].sum+=p;
t[now].maxsum=max(t[now*2].maxsum,max(t[now].sum-t[now*2+1].sum,t[now].sum-t[now*2+1].sum+t[now*2+1].maxsum));
}
POI2001 Gold mine(二叉排序树 黑书经典)的更多相关文章
- [POI 2001+2014acm上海邀请赛]Gold Mine/Beam Cannon 线段树+扫描线
Description Byteman, one of the most deserving employee of The Goldmine of Byteland, is about to re ...
- 刘汝佳黑书 pku等oj题目
原文地址:刘汝佳黑书 pku等oj题目[转]作者:小博博Mr 一.动态规划参考资料:刘汝佳<算法艺术与信息学竞赛><算法导论> 推荐题目:http://acm.pku.edu. ...
- HDU3996 Gold Mine(最大权闭合子图)
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using ...
- POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)
Gone Fishing Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 30281 Accepted: 9124 Des ...
- PAT1135(红黑书的判定)
There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...
- 【枚举】【lrj黑书】奇怪的问题(古老的智力题)
题目描述: 请回答下面的 10 个问题,你的回答应保证每题惟有你的选择是正确的. ⑴ 第一个答案是b 的问题是哪一个?(a )2 ( b ) 3 ( c ) 4 ( d ) 5 ( e ) 6⑵ 恰好 ...
- bzoj2539 丘比特的烦恼、黑书P333 (最优二分图匹配)
丘比特的烦恼 题目描述 Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女, ...
- BZOJ1697: [Usaco2007 Feb]Cow Sorting牛排序
1697: [Usaco2007 Feb]Cow Sorting牛排序 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 215[S ...
- poj 1390 Blocks (经典区间dp 方块消除)
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4250 Accepted: 1704 Descriptio ...
随机推荐
- C++ 容器及选用总结
目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五 ...
- zhuan:ubuntu下安装Apache2+php+Mysql
from: http://www.cnblogs.com/lynch_world/archive/2012/01/06/2314717.html ubuntu下安装Apache+PHP+Mysql 转 ...
- main函数的正确格式
main函数称之为主函数,一个C程序总是从main()函数开始执行的.在关于C语言的网贴和图书中,可以看到main函数的多种格式,这些格式,有的是正确的,有的是不正确的,为了避免错误,现归纳整理如下. ...
- "!x++" 我之见解
"!x++"之说,各人见解不同,但真理只有一个.我只尝试着说出一种见解,未知真相. 何如? "!x++"等价于"!(x++)". 理论分析 ...
- 【Passport】微软过时的技术
虽然已过时,没来得及体验,摘录一段别人的文章,假装对passport的了解 微软在过去的身份验证服务上,一直采用的Passport验证,但已经是N年前推出来的一个软件架构,当然也被软件界很多地方采用到 ...
- iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中
最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证 ...
- 关于谷歌Chrome浏览器的两个Bug?
1.网络资源下载莫名其妙的网络错误(也不支持续传?有时打开文件是损坏的?) 2.超级链接莫名的成了html下载?
- yum安装gcc
如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...
- PAT-乙级-1004. 成绩排名 (20)
1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...
- 安装ADT Cannot complete the install because one or more required items could not be found.
点击进行安装,将会弹出 错误提示是: Cannot complete the install because one or more required items could not be found ...