Find the hotel

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 767    Accepted Submission(s): 263

Problem Description
  Summer again! Flynn is ready for another tour around. Since the tour would take three or more days, it is important to find a hotel that meets for a reasonable price and gets as near as possible! 
  But there are so many of them! Flynn gets tired to look for any. It’s your time now! Given the <pi, di> for a hotel hi, where pi stands for the price and di is the distance from the destination of this tour, you are going to find those hotels, that either with a lower price or lower distance. Consider hotel h1, if there is a hotel hi, with both lower price and lower distance, we would discard h1. To be more specific, you are going to find those hotels, where no other has both lower price and distance than it. And the comparison is strict.
 
Input
There are some cases. Process to the end of file.
Each case begin with N (1 <= N <= 10000), the number of the hotel.
The next N line gives the (pi, di) for the i-th hotel.
The number will be non-negative and less than 10000.
 
Output
First, output the number of the hotel you find, and from the next line, print them like the input( two numbers in one line). You should order them ascending first by price and break the same price by distance.
 
Sample Input
3
15 10
10 15
8 9
 
Sample Output
1
8 9
 
Author
ZSTU
 
Source
 
  • 对于二元组(p,d)找凸点
  • 和hdu5517类似,但是这道题的数据范围是1e5,用树状数组做是开不下来的
  • 但是这题可以用ST表RMQ来解决
  • 对于每一个询问(pi,di)我们找p值小于pi的二元组,看其中的最小d的值,如果di<d我们就把(pi,di)添加进最终答案
  • 对于特殊的,如果p0是p值中的最小值,那么所有的(p0,d)组合都可以添加进最终答案
  • 从这道题的思路来讲,其实hdu5517也可以用这道题的方法做,就不用纠结二维树状数组的问题了
 #include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL ;
typedef unsigned long long ULL ;
const int maxn = 1e5 + ;
const int inf = 0x3f3f3f3f ;
const int npos = - ;
const int mod = 1e9 + ;
const int mxx = + ;
const double eps = 1e- ;
const double PI = acos(-1.0) ; struct node{
int p, d;
};
node h[maxn];
int cmp(const node &l, const node &r){
if(l.p!=r.p)
return l.p<r.p;
else
return l.d<r.d;
}
int Lower_Bound(int l, int r, int x){
while(l<r){
int m=(l+r)>>;
if(h[m].p>=x)
r=m;
else
l=m+;
}
return l;
}
int n, u, v, fac[], st[maxn], cnt;
int dp[maxn][], pl, pr, id;
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
for(int i=;i<;i++)
fac[i]=(<<i);
while(~scanf("%d",&n)){
for(int i=;i<=n;i++){
scanf("%d %d",&h[i].p,&h[i].d);
dp[i][]=i;
}
sort(h+,h++n,cmp);
int k=(int)(log((double)n)/log(2.0));
for(int j=;j<=k;j++)
for(int i=;i+fac[j]-<=n;i++){
pl=dp[i][j-];
pr=dp[i+fac[j-]][j-];
if(h[pl].d<h[pr].d)
dp[i][j]=pl;
else
dp[i][j]=pr;
}
u=;
cnt=;
st[cnt++]=;
for(int i=;i<=n;i++){
v=Lower_Bound(,i,h[i].p)-;
if(u<=v){
k=(int)(log((double)v)/log(2.0));
pl=dp[u][k];
pr=dp[v-fac[k]+][k];
if(h[pl].d<h[pr].d)
id=pl;
else
id=pr;
if(!(h[id].d<h[i].d))
st[cnt++]=i;
}else{
st[cnt++]=i;
}
}
printf("%d\n",cnt);
for(int i=;i<cnt;i++)
printf("%d %d\n",h[st[i]].p,h[st[i]].d);
}
return ;
}

HDU_3193_Find the hotel的更多相关文章

  1. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  2. ACM: Hotel 解题报告 - 线段树-区间合并

    Hotel Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description The ...

  3. HDU - Hotel

    Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...

  4. 【POJ3667】Hotel

    Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...

  5. POJ-2726-Holiday Hotel

    Holiday Hotel   Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8302   Accepted: 3249 D ...

  6. Method threw 'org.hibernate.exception.SQLGrammarException' exception. Cannot evaluate com.hotel.Object_$$_jvst485_15.toString()

    数据库字段和类Object属性不匹配,Method threw 'org.hibernate.exception.SQLGrammarException' exception. Cannot eval ...

  7. poj 3667 Hotel(线段树,区间合并)

    Hotel Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 10858Accepted: 4691 Description The ...

  8. [POJ3667]Hotel(线段树,区间合并)

    题目链接:http://poj.org/problem?id=3667 题意:有一个hotel有n间房子,现在有2种操作: 1 a,check in,表示入住.需要a间连续的房子.返回尽量靠左的房间编 ...

  9. 【BZOJ】【3522】【POI2014】Hotel

    暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...

随机推荐

  1. UART通信协议

    第一部分: UART使用的是 异步,串行通信.    串行通信是指利用一条传输线将资料一位位地顺序传送.特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场 ...

  2. 【Java面试题】31 介绍Collection框架的结构

    Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap   Collection  是单列集合 List   元素是有序的.可重复 有序的 colle ...

  3. 【算法】CRF

    http://www.open-open.com/doc/view/7e983c0bf1594849bcd088dc212098c4 http://wenku.baidu.com/link?url=c ...

  4. 基于windows的mongodb不支持mongodbsniff等其他一些功能

    http://stackoverflow.com/questions/15934102/mongodbs-mongosniff-for-windows

  5. 第四章 Spring.Net 如何管理您的类___统一资源访问接口

    在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...

  6. Mysql课后思考题

    1.请简述数据库.表和数据库服务器之间的关系? 知识点数据库存储结构 一个数据库服务器可以管理多个数据库,通常情况下开发人员会针对每个应用创建一个数据库,为保存应用中实体的数据,会在数据库中创建多个表 ...

  7. Python 爬虫知识点

    一.基础知识 1.HTML分析 2.urllib爬取 导入urilib包(Python3.5.2) 3.urllib保存网页 import urllib.requesturl = "http ...

  8. Error: could not find java.dll如何解决

    安装配置Java环境变量,在命令行中运行java -version进行测试时却出现下面的问题: Error: opening registry key 'Software\JavaSoft\Java ...

  9. thinkphp nginx+phpcgj安装配置

    环境:mysql-5.6.26             nginx-1.9.4.tar.gz   php-5.6.13 程序框架ThinkPHP 客户要求必须使用nginx + php 1.首先安装n ...

  10. 第十五篇:关于TCP通信程序中数据的传递格式

    前言 在之前的回射程序中,实现了字符串的传递与回射.幸运的是,字符串的传递不用担心不同计算机类型的大小端匹配问题,然而,如果传递二进制数据,这就是一个要好好考虑的问题.在客户端和服务器使用不同的字节序 ...