包含离散化
#include<iostream>
#include<algorithm>
using namespace std;
int a[] = {2,1,3,4,5,1};
int ss[] = {2,1,3,4,5,1};
bool cmp(int a,int b)
{
return a < b;
}
//lower_bound(a,a+n,x) - a 返回第一个大于等于x 当前目标值指针
//upper_bound(a,a+n,x) - a 返回第一个大于x 当前目标值指针
//lower_bound(a,a+n,x,greater<int>()) - a 返回第一个小于等于x 当前目标值指针
//upper_bound(a,a+n,x,greater<int>()) - a 返回第一个小于x 当前目标值指针
int main()
{
int n = 6;
sort(a,a + n);
for(int i = 0;i < n;i ++){
cout << a[i] << " ";
}
cout << endl;
// int pl = lower_bound(a,a+n,3) - a;// 输入1~5,返回0~4,大于5返回5,小于1返回0
// int pu = upper_bound(a,a+n,5) - a;// 输入1~5返回1~5
// int pl1 = lower_bound(a,a+n,5,greater<int>()) - a;//输入2~5 返回 0,输入1 返回5
// int pu1 = upper_bound(a,a+n,3,greater<int>()) - a;//为啥输入 1 2 3都返回5,不应该只输入小于等于1的才返回5吗
// cout << pu1 << endl;
int len = unique(a,a + n) - a ;//返回前面有多少长度不是重复的
for(int i = 0;i < n;i ++)
{
int idx = lower_bound(a,a + len,ss[i]) - a;//从唯一性的值里边去找下标 2 1 3 4 5
cout << idx + 1 << " ";
}
}
29行,为啥输入 1 2 3都返回5,不应该只输入小于等于1的才返回5吗