• hdu 5233 离散化 **


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

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

    明早起来拍一遍

    2015-05-26:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 #include<set>
     9 using namespace std;
    10 #define MOD 1000000007
    11 const int INF=0x3f3f3f3f;
    12 const double eps=1e-5;
    13 typedef long long ll;
    14 #define cl(a) memset(a,0,sizeof(a))
    15 #define ts printf("*****
    ");
    16 const int MAXN=100005;
    17 int a[MAXN],b[MAXN];
    18 int n,m,tt;
    19 set<int> vc[MAXN];
    20 int main()
    21 {
    22     int i,j,k;
    23     #ifndef ONLINE_JUDGE
    24     freopen("1.in","r",stdin);
    25     #endif
    26     while(scanf("%d%d",&n,&m)!=EOF)
    27     {
    28         for(i=0;i<n;i++)
    29         {
    30             scanf("%d",a+i);
    31             b[i]=a[i];
    32         }
    33         sort(b,b+n);
    34         int num=unique(b,b+n)-b-1;
    35         for(i=0;i<=num;++i)
    36             vc[i].clear();
    37         for(i=0;i<n;i++)
    38         {
    39             vc[lower_bound(b,b+num,a[i])-b].insert(i);   //vc[高度]=编号,高度是离散化之后的高度
    40         }
    41         int H;
    42         for(i=0;i<m;i++)
    43         {
    44             scanf("%d",&H);
    45             int HH=lower_bound(b,b+num,H)-b;
    46             if(b[HH]!=H||vc[HH].empty())
    47             {
    48                 printf("-1
    ");
    49             }
    50             else
    51             {
    52                 printf("%d
    ",*vc[HH].begin()+1);
    53                 vc[HH].erase(vc[HH].begin());
    54             }
    55         }
    56     }
    57 }
    
    
    
     
     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
    ");
    38         else if(bird[id].empty())
    39             printf("-1
    ");
    40         else
    41         {
    42             printf("%d
    ",*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 }
    
    
    



  • 相关阅读:
    188. 买卖股票的最佳时机 IV
    139. 单词拆分
    198. 打家劫舍
    122. 买卖股票的最佳时机II
    C#界面控件汇总
    电脑重装系统的三种方式
    SQL Server Profiler的使用
    反向路由检测 问题记录
    迅为龙芯2K1000开发板网络加载系统
    迅为IMX8M mini开发板Linix系统修改默认屏幕
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4529420.html
Copyright © 2020-2023  润新知