【题解】二分法查找左边界
参考代码:
# include <bits/stdc++.h> using namespace std; int a[100005]; int n,m,x; //数组大小,要查找的数大小,每次要查找的数 int main() { // freopen("1.in","r",stdin); // freopen("1.out","w",stdout); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>m; while(m--){ cin>>x; int index=lower_bound(a+1,a+n+1,x)-a; //查找第一个大于等于m的位置 if(index==n+1){ //没找到输出-1 cout<<-1<<" "; }else if(a[index]==x){ //找到了,输出位置 cout<<index<<" "; }else{ //第一个大于但是不等于的情况也输出-1 cout<<-1<<" "; } } return 0; }.jztagtree{max-height:85vh;right:0px}.jzDown{top:10vh}.jztagtree li a{background-color:#448EF6}.jztagtree li a:before{border-right:10px solid #448EF6}.jztagtree li a:hover{background:#0045a6}.jztagtree li a:hover::before{border-right:10px solid #0045a6}
$("#jztoc").toc({content: ".single", headings: "h1,h2,h3"});