二分查找
输入 n 个不超过 10九次方 的单调不减的(就是后面的数字不小于前面的数字)非负整数 𝑎1,𝑎2,…,𝑎𝑛然后进行 m 次询问。对于每次询问,给出一个整数 𝑞,
要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 −1。
这道题直接用std表中的函数即可
while(m--) { cin>>x; y=*lower_bound(a+1,a+1+n,x); z=lower_bound(a+1,a+1+n,x)-a; if(y!=x)cout<<"-1"<<" "; else cout<<z<<" "; }
但如果比较喜欢手搓二分的话:
l = 0, r = 0x3f3f3f3f3f3f3f; while(l<=r){ mid = (l + r) >> 1; if(ans<mid) r = mid - 1; else if(ans>mid) l = mid + 1; else break; } cout << ans << endl;
以上为原始二分,无加工。如果没有任何题目的束缚,最开始的二分算法长这样的。。。。。。。。。。
就像数学,随着时间,难度越大,变成了越来越陌生的样子。

浙公网安备 33010602011771号