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;
}

 

posted @ 2021-04-04 13:21  zmachine  阅读(206)  评论(0编辑  收藏  举报