HDU_3193_Find the hotel
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
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.
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.
15 10
10 15
8 9
8 9
- 对于二元组(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的更多相关文章
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
- ACM: Hotel 解题报告 - 线段树-区间合并
Hotel Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description The ...
- HDU - Hotel
Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...
- 【POJ3667】Hotel
Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...
- POJ-2726-Holiday Hotel
Holiday Hotel Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8302 Accepted: 3249 D ...
- 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 ...
- poj 3667 Hotel(线段树,区间合并)
Hotel Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 10858Accepted: 4691 Description The ...
- [POJ3667]Hotel(线段树,区间合并)
题目链接:http://poj.org/problem?id=3667 题意:有一个hotel有n间房子,现在有2种操作: 1 a,check in,表示入住.需要a间连续的房子.返回尽量靠左的房间编 ...
- 【BZOJ】【3522】【POI2014】Hotel
暴力/树形DP 要求在树上找出等距三点,求方案数,那么用类似Free Tour2那样的合并方法,可以写出: f[i][j]表示以 i 为根的子树中,距离 i 为 j 的点有多少个: g[i][j]表示 ...
随机推荐
- vector、map删除当前记录
map<string, string> sMap; map<string, string>::iterator iter; for(iter = sMap.begin();it ...
- python中使用@property
class Student(object): @property def score(self): return self._score @score.setter def score(self, v ...
- CSS导入使用及引用的两种方法
方法一<link rel="stylesheet" type="text/css" href="test.css"> 方法二&l ...
- jpa动态分页查找
https://my.oschina.net/buwei/blog/172402 http://www.cnblogs.com/derry9005/p/6282571.html http://2560 ...
- Linux配置防火墙,开启80port、3306port 可能会遇到的小问题
vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(同意80端口通 ...
- hadoop本地测试命令
http://www.cnblogs.com/shishanyuan/p/4190403.html if have assign the /etc/profile: hadoop jar /usr/l ...
- AssetBundle中Unload()方法的作用
AssetBundle.Unload(false)的作用: 官网的解释是这样的: When unloadAllLoadedObjects is false, compressed file data ...
- htaccess文件中RewriteRule 规则参数介绍
.htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...
- Oracle Apex 有用笔记系列 2 - 文件上传管理
1. 页面设计 页面A有若干region, 当中一个region用于文件列表管理(包含显示,下载.删除).如图A. 在页面A有一button,点击它会调用页面B,页面B负责文件上传.如图B. 图A 图 ...
- Dubbo(四) -- telnet命令
一.telnet的作用 当dubbo服务(即生产者)发布之后,我们可以通过telnet命令来来进行调试和管理,以及跟踪服务调用的次数. 注意:2.0.5以上版本服务提供端口支持telnet命令,协议一 ...