- 分享
二分
- @ 2026-7-19 9:10:37
#include<bits/stdc++.h>
using namespace std;
int main(){
//有 n 个数字,查找 x 第一次出现的位置
// 数组:a[N]
int l = 1, r = n, ans = -1;
while(l <= r){
int mid = (l + r) / 2;
//int mid = l + (r - l) / 2;
//int mid = l + r >> 1;
if(a[mid] > x){
//中间值比 x 大,中间值后面所有的元素都比 x 大
r = mid - 1;
}else if(a[mid] < x){
//中间值比 x 小,中间值钱面所有的元素都比 x 小
l = mid + 1;
} else {
//当前位置可能是第一次出现,也可能不是第一次出现
ans = mid;
r = mid - 1;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
//有 n 个数字,查找 x 最后一次出现的位置
// 数组:a[N]
int l = 1, r = n, ans = -1;
while(l <= r){
int mid = (l + r) / 2;
//int mid = l + (r - l) / 2;
//int mid = l + r >> 1;
if(a[mid] > x){
//中间值比 x 大,中间值后面所有的元素都比 x 大
r = mid - 1;
}else if(a[mid] < x){
//中间值比 x 小,中间值钱面所有的元素都比 x 小
l = mid + 1;
} else {
//当前位置可能是最后一次出现,也可能不是最后一次出现
ans = mid;
l = mid + 1;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
bool check(int x){
}
int main(){
// 木材加工
// 让小段木头尽可能的长,并且数量大于等于 k
int l = 1, r = 1e8, ans = -1;//l,r表示答案所在的区间
while(l <= r){
int mid = l + r >> 1;
if(check(mid)){
//如果小段木头的长度是 mid ,数量 >= k
ans = mid;
l = mid + 1;
}else{
//当前长度的数量不足
r = mid - 1;
}
}
return 0;
}
8 条评论
-
史佳宸 黑铁 Lv.破局 @ 2026-8-1 12:12:39考古
-
@ 2026-7-30 9:26:12你好
-
@ 2026-7-19 9:21:21
| x | o | o | | o | x | o | | o | o | x |
-
@ 2026-7-19 9:14:44
拉拉咕咕嘎嘎
-
@ 2026-7-19 9:13:38?
😄 3 -
@ 2026-7-19 9:12:233楼
😄 1 -
@ 2026-7-19 9:10:56
2
-
@ 2026-7-19 9:10:461楼
😄 1
- 1