码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5233 离散化 **

时间:2015-05-26 01:34:21      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

题意:很久很久以前,有一个叫Jack的枪手。他非常喜欢打猎。一天,他去了一个小树林。那儿有n只鸟,还有n棵树。第i只鸟站在第i棵树的顶端。这些树从左到右排成一条直线。每一棵树都有它的高度。Jack站在最左边那棵树的左边。当Jack在高度为H的地方向右发射一棵子弹时,站在高度为H的树上且离Jack最近的鸟儿就会落下来。
Jack会射击多次,他想知道每次射击哪只鸟儿会落下来。

怎么看都是以前出过的题啊,但还是不会

明早起来拍一遍
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<set>
 9 #define maxn 100010
10 using namespace std;
11 typedef long long LL;
12 typedef unsigned long long ULL;
13 set<int> bird[maxn];
14 int n,m,tn,h[maxn];
15 int tmp[maxn];
16 void read()
17 {
18     for(int i=1;i<=n;++i)
19     {
20         scanf("%d",h+i);
21         tmp[i]=h[i];
22     }
23     sort(tmp+1,tmp+n+1);
24     tn=unique(tmp+1,tmp+n+1)-tmp-1;
25     for(int i=1;i<=tn;++i)
26         bird[i].clear();
27     for(int i=1;i<=n;++i)
28         bird[lower_bound(tmp+1,tmp+tn+1,h[i])-tmp].insert(i);
29 }
30 void Query()
31 {
32     for(int i=1,x;i<=m;++i)
33     {
34         scanf("%d",&x);
35         int id=lower_bound(tmp+1,tmp+tn+1,x)-tmp;
36         if(tmp[id]!=x)  //没找到
37             printf("-1\n");
38         else if(bird[id].empty())
39             printf("-1\n");
40         else
41         {
42             printf("%d\n",*bird[id].begin());
43             bird[id].erase(bird[id].begin());
44         }
45     }
46 }
47 int main()
48 {
49     while(cin>>n>>m)
50     {
51         read();
52         Query();
53     }
54     return 0;
55 }

 




hdu 5233 离散化 **

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4529420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!