【李老师】CSP200--第9课:二分查找

李CSP200

2024-07-11 7:59:10
2024-07-12 7:09:10

信息与公告

1、知识点
(1)算法思想:利用数据的有序性,通过二分排除,实现快速查找,时间复杂度O(logn)
(2)适用条件:升序或降序序列
(3)二分查找函数:lower_bound()、upper_bound()(假设数组a的长度为n)

2、例题:#11664. 三角形数

//思路:计算每个三角形数,放在t数组中,在t数组中二分查找x-t[i]。
int t[50002];
int main()
{
	int x;
	cin>>x;
	for(int i=1; i<=50000; i++)  //计算每个三角形数
	{
		t[i]=i*(i+1)/2;
	}
	for(int i=1; i<=50000; i++)
	{
		int p=lower_bound(t+1,t+50001,x-t[i])-t;   //二分查找x-t[i]
		if(p<50001&&t[p]==x-t[i])
		{
			cout<<"YES";
			return 0;
		}
	}
	cout<<"NO";
	return 0;
}