二分超时,死循环,二分总是死循环,有什么原因吗?
#include<bits/stdc++.h>
using namespace std;
int n,m,a[500010],b[500010],num,sum;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=m;i++){
int l=0,r=n,mid=(l+r)/2;
cin>>b[i];
int nm=upper_bound(a+1,a+1+3,b[i])-lower_bound(a+1,a+1+3,b[i]);
while(l<r){
if(mid>b[i])
r=mid;
else
l=mid+1;
}
for(int i=l;i<=l+nm-1;i++)
a[i]=-1;
}
for(int i=1;i<=n;i++){
if(a[i]==-1){
if(num!=0)
sum++;
num=0;
}else
num++;
}
if(a[n]!=-1)
sum++;
cout<<sum;
return 0;
}