Hàm binary_search và lower_bound trong C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ii;
int main()
{
	ll n;
	cin >> n;
	vector <ll> a(n);
	vector <ll> b(n);
	for (ll i=0;i<n;i++) 
	{
		cin >> a[i];
		b[i]=a[i];
	}
	sort(b.begin(),b.end(),greater<ll>());
	if (binary_search(b.begin(),b.end(),3)) cout <<"YES";
	else cout <<"NO";
//	auto it=lower_bound(b.begin(),b.end(),3);
//	cout <<*it;
//	for (ll i=0;i<n;i++) cout << b[i] <<" ";
//	for (ll i=0;i<n;i++)
//	{
//		auto it=lower_bound(b.begin(),b.end(),a[i]);
////		ll chiso=it-b.begin();
////		 swap(a[i],a[chiso]);
//		cout << *it <<" ";
////		if (chiso!=i) cout << i <<" " <<chiso << endl;  
//	}
}

Đây là code của em, em muốn hỏi là tại sao hàm binary_search của em không hđ trên mảng b nhỉ? Em nhập
INP:

4
3 4 1 2

rõ ràng mảng b có số 3 mà nó không cout ra YES mà lại ra No, tương tự với hàm lower_bound trong phần em khóa lại cũng không hđ :< Mng giúp em với ạ

https://en.cppreference.com/w/cpp/algorithm/binary_search
Bạn thử xem specification của hàm std::binary_search xem có phát hiện ra điểm gì ko nha.

Bạn đang dùng version nào trong số các overloading của nó, và version đó có điểm gì đặc biệt?

3 Likes

dạ em phát hiện ra là do em sắp xếp mảng b giảm dần chứ k phải tăng dần =)) mà lower_bound với binary_search chỉ áp dụng với mảng tăng dần

1 Like

Dùng tham số thứ 4 của binary_search là được.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?