Problem A Where is the Marble?(查找排序)

题目链接:Problem A

题意:有n块大理石,每个大理石上写着一个非负数,首先把数从小到大排序,接下来有Q个问题,每个问题是是否有某个大理石上写着x,如果有,则输出对应的大理石编号。

思路:先排序,然后实现查找某个数第一次出现的位置。

note:

头文件:#include <algorithm>

ForwardIter lower_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于等于val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。

code:

 1 #include <cstdio>

 2 #include <algorithm>

 3 using namespace std;

 4 const int MAXN = 10005;

 5 int main()

 6 {

 7     int n, m, x, cnt = 0;

 8     int a[MAXN];

 9     while (scanf("%d %d", &n, &m), n + m)

10     {

11         for (int i = 0; i < n; ++i) scanf("%d", a + i);

12         sort(a, a + n);

13         printf("CASE# %d:\n", ++cnt);

14         while (m--)

15         {

16             scanf("%d", &x);

17             int p = lower_bound(a, a + n, x) - a;

18             if (a[p] == x) printf("%d found at %d\n", x, p + 1);

19             else printf("%d not found\n", x);

20         }

21     }

22     return 0;

23 }

 

你可能感兴趣的:(where)