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