hdu3193(RMQ)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3193

转换成求价格在0到p的酒店中的最短距离。。。

p最大10000

当p为0时一定选

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn=10010;
 7 struct node
 8 {
 9     int p,d;
10     bool operator< (const node&a) const {
11     if(p==a.p) return d<a.d;
12     return p<a.p;
13     }
14 }v[maxn],res[maxn];
15 int a[maxn];
16 int pmin[maxn][30];
17 void RMQ_INIT()
18 {
19     int k=log(maxn+0.0)/log(2.0);
20     for(int i=0;i<=maxn;i++) pmin[i][0]=a[i];
21     for(int j=1;j<=k;j++)
22         for(int i=0;i+(1<<j)-1<=maxn;i++)
23         pmin[i][j]=min(pmin[i][j-1],pmin[i+(1<<j-1)][j-1]);
24 }
25 int rmq(int x,int y)
26 {
27     int k=log(y*1.0-x+1)/log(2.0);
28     return min(pmin[x][k],pmin[y-(1<<k)+1][k]);
29 }
30 int main()
31 {
32     int n;
33     while(scanf("%d",&n)!=EOF)
34     {
35         int cnt=0;
36         for(int i=0;i<=maxn;i++) a[i]=0x3f3f3f3f;
37         for(int i=0;i<n;i++)
38         {
39             scanf("%d%d",&v[i].p,&v[i].d);
40             a[v[i].p]=min(a[v[i].p],v[i].d);
41         }
42         RMQ_INIT();
43         for(int i=0;i<n;i++)
44         {
45             if(v[i].p==0) res[cnt++]=v[i];  //至少价格不会有更低的,选中
46             else{
47                 int d=rmq(0,v[i].p-1);
48                 if(d>=v[i].d)  res[cnt++]=v[i]; //如果比它便宜的酒店中最短距离不比它小,选中
49             }
50         }
51         sort(res,res+cnt);
52         printf("%d\n",cnt);
53         for(int i=0;i<cnt;i++)
54             printf("%d %d\n",res[i].p,res[i].d);
55     }
56 }
时间: 2024-12-21 04:15:33

hdu3193(RMQ)的相关文章

UVA 11235 Frequent values(RMQ)

Frequent values TimeLimit:3000Ms You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j ≤ n). For each query, determine the most f

【POJ 3368】 Frequent values(RMQ)

[POJ 3368] Frequent values(RMQ) Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15813   Accepted: 5749 Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given seve

hdu 3183 A Magic Lamp(RMQ)

A Magic Lamp                                                                               Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Kiki likes traveling. One day she finds a magic lamp, u

POJ 3419 (rmq)

这道题是rmq,再加上一个解决溢出. 刚开始我也想过用rmq,虽然不知道它叫什么,但是我知道应该这样做.可是后来没想到这道题的特殊性,也就是解决溢出的方法,就放弃了. rmq可以用线段树,也可以用dp.  这道题都可以过的,而且线段树要快一些. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define m

nyoj 119 士兵杀敌(三)(RMQ)

士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果. 所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少. 现在,请你写一个程序,帮小工回答南将军每次的询问吧. 注意,南将军可能询问很多

hihoCoder - 1068 - RMQ-ST算法 (RMQ)

#1068 : RMQ-ST算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当地特产--比如汉堡(大雾)之类的回国. 但等到了超市之后,小Hi和小Ho发现者超市拥有的商品种类实在太多了--他们实在看不过来了!于是小Hi决定向小Ho委派一个任务:假设整个货架上从左到右拜访了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标

Balanced Lineup(RMQ)

原题传送门 就是裸RMQ啊.. 求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以. 至于算法嘛.自己学~(好吧,放个传送门...) 然后就是最后把maxsum-minsum就好啦233~ 时间效率:预处理O(N)查找O(1) 是不是很快~ 下面贴代码 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int n

UVA-11235 Frequent values (RMQ)

题目大意:在一个长度为n的不降序列中,有m次询问,每次询问(i,j)表示在区间(i,j)中找出出现次数最多的元素的出现次数. 题目分析:因为序列有序,可以将序列分段,并且记录每段的元素个数.每一个元素所属的段num(i).每一个元素所属段的左端点l(i)及右端点r(i).那么对于每次询问: ans(i,j)=max(max(r(i)-i+1,j-l(j)+1),rmq(num(i)+1,num(j)-1)). ans(i,j)=r-j+1 (如果i与j属于同一段) 代码如下: # include

HDU 4123 Bob’s Race(RMQ)

题意是说给出一棵树,N(10^5)个顶点,以及每条边的权值,现在需要选择连续的K个点(顶点编号连续),可以被选出来的条件是: 若d[i]代表顶点i到树上其他点的距离的最大值,使得区间[a, b]的d值的最大差值不大于Q, 也就是max(d[a], d[a + 1], ..., d[b]) - max(d[a], d[a + 1], ..., d[b]) <= Q Q是给出的一个查询(共有m<=500个查询),求对应每一个查询的K的最大值 思路是首先预处理出每个点到其他点的最大距离, 这可以通过