标签:
Time Limit: 20 Sec Memory Limit: 256 MB
http://acm.hdu.edu.cn/showproblem.php?pid=5233
多组测试数据(大概5组),每一组的第一行给出n,m,n表示有n棵树和n只鸟,m表示Jack会射击m次。 在第二行,有n个整数h[1],h[2],h[3],…,h[n]表示这些树的高度。 在第三行,有m个整数,q[1],q[2],q[3],…,q[m]表示Jack射击的高度。 [参数约定] 所有输入均为整数。 1<=n,m<=100000(10^5) 1<=h[i],q[i]<=1000000000(10^9)
Output
对于每一个q[i],在一行中输出Jack射落的鸟的id。如果没有射中鸟儿,请输出-1。 (id 从1开始编号。)
1 3 5 4 2
题意
题解:
离散化离散化!
搞搞搞,就变成傻逼题了!
代码:
//qscqesze #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> #include <stack> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define maxn 200001 #define mod 10007 #define eps 1e-9 int Num; char CH[20]; //const int inf=0x7fffffff; //нчоч╢С const int inf=0x3f3f3f3f; /* inline void P(int x) { Num=0;if(!x){putchar(‘0‘);puts("");return;} while(x>0)CH[++Num]=x%10,x/=10; while(Num)putchar(CH[Num--]+48); puts(""); } */ inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f; } inline void P(int x) { Num=0;if(!x){putchar(‘0‘);puts("");return;} while(x>0)CH[++Num]=x%10,x/=10; while(Num)putchar(CH[Num--]+48); puts(""); } //************************************************************************************** struct node { int x,y; }; node h[maxn]; int q[maxn]; map<int,int> H; vector<int> k; vector<int> dp[maxn]; int cnt[maxn]; int main() { //freopen("test.txt","r",stdin); int n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(h,0,sizeof(h)); memset(q,0,sizeof(q)); H.clear(); k.clear(); for(int i=0;i<maxn;i++) dp[i].clear(); memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) { h[i].x=read(); h[i].y=i+1; k.push_back(h[i].x); } for(int i=0;i<m;i++) { q[i]=read(); k.push_back(q[i]); } sort(k.begin(),k.end()); k.erase(unique(k.begin(),k.end()),k.end()); for(int i=0;i<k.size();i++) { H[k[i]]=i; } //cout<<endl; for(int i=0;i<n;i++) dp[H[h[i].x]].push_back(h[i].y); for(int i=0;i<m;i++) { if(cnt[H[q[i]]]>=dp[H[q[i]]].size()) { printf("-1\n"); } else { printf("%d\n",dp[H[q[i]]][cnt[H[q[i]]]]); cnt[H[q[i]]]++; } } } }
标签:
原文地址:http://www.cnblogs.com/qscqesze/p/4524906.html