求
查看原帖
求
1252442
lucy2012楼主2024/5/12 18:56

二分超时,死循环,二分总是死循环,有什么原因吗?

#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;
}
2024/5/12 18:56
加载中...