求问编译错误,无报错但是过不去,烦请大佬帮我看看

P2249 【深基13.例1】查找

额。。看了一下,是数组开太大了
by Into_the_Abyss @ 2024-03-22 22:36:35


@[Answerexploer](/user/945635) 并且你这个二分思路也不太正确
by Into_the_Abyss @ 2024-03-22 22:38:46


@[Answerexploer](/user/945635) 改了一下,AC了
by Into_the_Abyss @ 2024-03-22 22:44:32


```cpp #include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n,m,a[N],x; void bi_find(int target) { int l=1,r=n,mid,last=-1; while(l<=r) { mid=(l+r)/2; if(a[mid]==target)last=mid; if(a[mid]<target)l=mid+1; else r=mid-1; } cout<<last<<" "; } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=m;i++) { scanf("%d",&x); bi_find(x); } return 0; } ``` @[Answerexploer](/user/945635)
by Into_the_Abyss @ 2024-03-22 22:44:53


@[Into_the_Abyss](/user/1223722) 同学,首先很感谢你能详细地看完我的代码,并给出了完整解答。 其次,你说的确实在理,都是我没考虑到的。 最后表达一下我的倾佩,当时只想着写二分了,没注意到要保证有重复值时返回第一个,细看完你的代码才发觉不用二分查找完刻意去前面找最前的一个(刚开始没看懂你二分的顺序,孤陋了)。 已关注,以示感谢。
by Answerexploer @ 2024-03-23 09:57:59


|