[关闭]
@guxier 2022-03-26T04:57:32.000000Z 字数 771 阅读 341

洛谷-P2249 【深基13.例1】查找

洛谷 二分


再刷二分模板题原题链接

二分(1)

  1. int bsearch(int l ,int r)
  2. {
  3. while(l < r)
  4. {
  5. int mid = l + r >> 1;
  6. if(check (mid) ) l = mid;
  7. else r = mid - 1;
  8. }
  9. return mid;
  10. }

二分(2)

  1. int bsearch(int l ,int r)
  2. {
  3. while(l > r)
  4. {
  5. int mid = l + r + 1 >> 1;
  6. if(check(mid)) l = mid + 1;
  7. else r = mid;
  8. }
  9. return l;
  10. }

C++ 代码

  1. #include <bits/stdc++.h>
  2. #define ios ios::sync_with_stdio(false), cin.tie(0)
  3. #define sd(n) scanf("%d",&n)
  4. #define rep(i,a,n) for(int i = a; i <= n ; i++)
  5. #define per(i,a,n) for(int i = n; i>= a; i--)
  6. #define debug(x) cout << #x << ": " << x << endl
  7. #define MOD 1000000007
  8. #define INF 0x3f3f3f3f
  9. typedef long long ll;
  10. using namespace std;
  11. const int N = 1e6 + 10;
  12. int n , m , a[N] ;
  13. int bsearch(int l ,int r, int x)
  14. {
  15. while(l < r)
  16. {
  17. int mid = l + r >> 1;
  18. if( x > a[mid]) l = mid + 1;
  19. else r = mid;
  20. }
  21. if(a[l] != x) return -1;
  22. return l;
  23. }
  24. int main()
  25. {
  26. ios;
  27. cin >> n >> m;
  28. rep(i , 1, n)
  29. cin >> a[i];
  30. rep(i , 1, m)
  31. {
  32. int x;
  33. cin >> x;
  34. cout << bsearch(1, n , x) << ' ';
  35. }
  36. // cout << endl;
  37. return 0;
  38. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注