c++ upper_bound 和 lower_bound
巧妙利用二分来降低时间复杂度
#include <bits/stdc++.h> using namespace std; //lower_bound()用于寻找第一个大于等于val的位置 //upper_bound()用于寻找第一个大于val的位置 //数组的话返回相应位置的指针,容器的话返回迭代器 //没有找到的话,会返回需要插入的位置 //注意可以利用他来降低时间复杂度,从而ac int main(){ int a[10] = {1,2,2,3,3,3,5,5,5,5}; int *lower = lower_bound(a,a+10,-1); int *upper = upper_bound(a,a+10,-1); printf("%d %d\n",lower-a,upper-a);//输出相应的位置 lower = lower_bound(a,a+10,1); upper = upper_bound(a,a+10,1); printf("%d %d\n",lower-a,upper-a);//输出相应的位置 lower = lower_bound(a,a+10,3); upper = upper_bound(a,a+10,3); printf("%d %d\n",lower-a,upper-a);//输出相应的位置 lower = lower_bound(a,a+10,5); upper = upper_bound(a,a+10,5); printf("%d %d\n",lower-a,upper-a);//输出相应的位置 lower = lower_bound(a,a+10,6); upper = upper_bound(a,a+10,6); printf("%d %d\n",lower-a,upper-a);//输出相应的位置 return 0; }