题目描述
​ 某地总共有 M 堆瓜,第 i 堆瓜的数量为 Xi。现有 N 组群众现在想要吃瓜,第 i 组群众想要吃的瓜的数量为 Yi。现在对于每组想吃瓜的群众,需要在 M 堆瓜中查找对应数量的一堆瓜,并输出那堆瓜的编号,若找不到对应数量的一堆,则输出 0。

输入
​ 输入共 3 行。

第一行两个整数 M,N。

第二行 M 个整数分别表示 X1,X2…XM。(保证各不相同)

第三行 N 个整数分别表示 Y1,Y2…YN。(保证各不相同)

输出
​ 对于每个 Yi 输出一行一个整数为对应数量的瓜的编号,若没有对应数量的瓜,则输出 0。

样例输入
5 3
1 3 26 7 15
26 99 3
样例输出
3
0
2
数据规模与约定
​ 时间限制:1 s

内存限制:256 M

100% 的数据保证 1≤M,N≤100,000,1≤Xi,Yi≤1,000,000,000

#include <stdio> 
#include <iostream>
#include <algorithm>
using namespace std;

struct waterm {
int num, cnt;
};

bool cmp(waterm a, waterm b) {
return a.cnt < b.cnt;
}

int main() {
int m, n;
waterm wm[100005];
scanf("%d%d",&m,&n);
for (int i = 0; i < m; i++) {
scanf("%d",&wm[i].cnt);
wm[i].num = i + 1;
}
sort(wm, wm + m, cmp);
for (int i = 0; i < n; i++) {
int t, l = 0, r = m - 1, f = 0;
scanf("%d",&t);
while (l <= r) {
int mid = (l + r) / 2;
if (wm[mid].cnt == t) {
printf("%d\n", wm[mid].num);
f = 1;
break;
}
if (wm[mid].cnt < t) {
l = mid + 1;
} else {
r = mid - 1;
}
}
if (!f) printf("0\n");
}
return 0;
}