社区讨论
左闭右闭二分,为什么这个补丁会造成#6TLE
P2249【深基13.例1】查找参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj30c8y
- 此快照首次捕获于
- 2025/11/03 19:53 4 个月前
- 此快照最后确认于
- 2025/11/03 19:53 4 个月前
如题,
CPP#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[1000010];
int q;
int hfind(int num)
{
int l = 1; int r = n;
while(l <= r)
{
int md = (l + r)/2;
if(arr[md] < num) l = md + 1;
else if(arr[md] > num) r = md - 1;
else if(arr[md] ==num) return md;//正规解法是不return,然后把==这个情况放到>的情况里了
}
if(arr[l] == num) return l;//正解有这一行,tle没有
else return -1;
}
int main()
{
memset(arr,-1,sizeof(arr));
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> arr[i];
for(int i = 0; i < m; i++)
{
cin >> q;
int rt = hfind(q);
while(rt != -1 && arr[rt-1] == q) rt--;补丁就是这一行,检测如果与前一个相同则rt左移
cout << rt << ' ';
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...