Processing math: 6%
Solutions of Binary search - MarisaOJ: Marisa Online Judge

Solutions of Binary search

Select solution language

Write solution here.


User Avatar benjamin_tom    Created at    1 likes

Ý tưởng

  • Sử dụng chặt nhị phân để tìm x trong mảng đã sắp xếp

Nếu tìm thấy x thì trả về mid + 1, vì theo đề mảng chạy từ 1 đến n

if(a[mid]==x) return mid+1;

Nếu a[mid] < x thì tìm ở nửa bên phải

else if(a[mid] < x) l = mid+1;

Nếu a[mid] > x thì tìm ở nửa trái

else r = mid-1;

CHÚ Ý: Để sử dụng tìm kiếm nhị phân thì mảng phải được sắp xếp tăng dần

sort(a, a+n);

Code tham khảo:

Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này

#include<bits/stdc++.h>
using namespace std;

int tknp(int a[], int n, int x){
    int l = 0, r=n-1;
    while(l <= r){
        int mid = (l+r)/2;
        if(a[mid]==x) return mid+1;
        else if(a[mid] < x) l = mid+1;
        else r = mid-1;
    }
    return 0;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); 
    int n, q; cin >> n >> q;
    int a[n];
    for(int i =0; i <n; ++i) cin >> a[i];
    sort(a, a+n);
    while(q--){
        int x; cin >> x;
        cout << tknp(a, n, x) << endl;
    }
}
// marisaoj