求助:logn比n方算法跑的还慢?
查看原帖
求助:logn比n方算法跑的还慢?
716721
leo12334楼主2023/2/1 11:03

很离谱的一件事情,一开始用n方算法写的,用了46ms

int cmp(node a,node b){
	if(a.x==b.x)return a.y>b.y;
	return a.x>b.x;
}
int main(){
	cin>>n;
	//每次找一个大于他的最接近的,没有的话就新建一个 
	for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		if(h[ans]<a[i].y)h[++ans]=a[i].y;
		else{
			int pos=0,minn=1e8;//找一个比他大的最小的木棍 
			for(int j=1;j<=ans;j++){
				if(h[j]>=a[i].y&&minn>h[j]){
					minn=h[j];pos=j;
				} 
			}
			h[pos]=a[i].y;
		}
	}
	cout<<ans<<endl;
}

后来优化到了nlogn,把第二层for循环用lower_bound替代,结果花了47ms,求助各位大佬这是怎么回事

for(int i=1;i<=n;i++){
	if(h[ans]<a[i].y)h[++ans]=a[i].y;
	else{
		int pos=lower_bound(h+1,h+ans,a[i].y)-h;
		h[pos]=a[i].y;
	}
}
2023/2/1 11:03
加载中...