标签:
题目实在是水题,主要是学习sort以及 lower_bound
x为待查找的元素
int p=lower_bound(a,a+n,x)-p;返回a中第一个大于或等于x的元素的位置,使用lower_bound前要将数组进行排序。函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!
upper_bound
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int stone[10010]; int main() { int n,q,x; int test=0; while(~scanf("%d%d",&n,&q)) { if(n==0 && q==0) break; test++; memset(stone,0,sizeof(stone)); for(int i=0;i<n;i++) { scanf("%d",&stone[i]); } sort(stone,stone+n); printf("CASE# %d:\n",test); for(int i=0;i<q;i++) { scanf("%d",&x); int p=lower_bound(stone,stone+n,x)-stone; if(stone[p]==x) { printf("%d found at %d\n",x,p+1); } else { printf("%d not found\n",x); } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/LinesYao/p/5459729.html