'commit'
This commit is contained in:
55
TangDou/AcWing/DP/LIS/ErFenTest.cpp
Normal file
55
TangDou/AcWing/DP/LIS/ErFenTest.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
const int N = 6;
|
||||
int a[N] = {1, 2, 2, 3, 3, 4};
|
||||
|
||||
//模拟STL中的lower_bound,左闭右开写法
|
||||
// int lower_bound(int x) {
|
||||
// int l = 0, r = 7; //左闭右开
|
||||
// while (l <= r) {
|
||||
// int mid = (l + r) >> 1;
|
||||
// if (x > a[mid])
|
||||
// l = mid + 1;
|
||||
// else
|
||||
// r = mid - 1;
|
||||
// }
|
||||
// return l;
|
||||
// }
|
||||
|
||||
int upper_bound(int x) {
|
||||
int l = 0, r = N;
|
||||
while (l <= r) {
|
||||
int mid = l + ((r - l) >> 1);
|
||||
if (x >= a[mid]) // upper的话等于的时候也返 //回右边,因为要找到大于最后一个key。
|
||||
l = mid + 1;
|
||||
else
|
||||
r = mid - 1;
|
||||
}
|
||||
return l; //记得返回L。
|
||||
}
|
||||
|
||||
int lower_bound(int x) {
|
||||
int l = 0, r = N;
|
||||
while (l <= r) {
|
||||
int mid = l + ((r - l) >> 1);
|
||||
if (x > a[mid])
|
||||
l = mid + 1;
|
||||
else // lower相等时候就返回左边,因为要
|
||||
//找到第一个key。
|
||||
r = mid - 1;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
int main() {
|
||||
printf("%d\n", lower_bound(3));
|
||||
printf("%d\n", upper_bound(3) - 1);
|
||||
|
||||
printf("%d\n", lower_bound(4));
|
||||
printf("%d\n", upper_bound(4) - 1);
|
||||
|
||||
printf("%d\n", lower_bound(5));
|
||||
printf("%d\n", upper_bound(5) - 1);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user