#include <algorithm>
#include <iostream>
#include <math.h>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;

int main(int argc, char const *argv[])
{
    int number[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    vector<int> v(number, number + 10);
    // 返回第一次大于等于2 的位置所在 v[1]
    int k1 = lower_bound(v.begin(), v.end(), 2) - v.begin();
    cout << k1 << endl;
    // 返回第一次大于2 的位置所在v[2]
    int k2 = upper_bound(v.begin(), v.end(), 2) - v.begin();
    cout << k2 << endl;

    // 返回第一次大于等于2 的位置所在 number[1]= 2
    int k3 = lower_bound(number, number + 10, 2) - number;
    // 返回第一次大于等于2 的位置所在number[2]=3
    int k4 = upper_bound(number, number + 10, 2) - number;
    cout << k3 << endl;
    cout << k4 << endl;
    //反转操作
    reverse(number, number + 10);//10,9 ,8,7,6,5,4,3,2,1

    // 返回第一次小于等于3 的位置所在   a[7]=3
    int k5 = lower_bound(number, number + 10, 3, greater<int>()) - number;
    // 返回第一次小于3 的位置所在 a[8]=2
    int k6 = upper_bound(number, number + 10, 3, greater<int>()) - number;
    cout << k5 << endl;
    cout << k6 << endl;
    return 0;
}