Asif_Anwar

Searching first and last occurrence of key element in O(logn)

Oct 28th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. /*
  2. Author: Asif Anwar(2019831045)
  3. */
  4.  
  5. #include <bits/stdc++.h>
  6.  
  7. using namespace std;
  8. int main()
  9. {
  10.     int n;
  11.     cout << "Enter the number of elements: ";
  12.     cin >> n;
  13.     int arr[n];
  14.     cout << "Enter the elements: ";
  15.     for(int i=0; i<n; i++) {
  16.         cin >> arr[i];
  17.     }
  18.     int key;
  19.     cout << "Enter the key you want to search: ";
  20.     cin >> key;
  21.     // searching for the first occurrence of the key value
  22.     int begin = 0, end = n-1;
  23.     int upBound = -1, lowBound = -1;
  24.     while(begin<=end){
  25.         int mid = begin + (end-begin)/2;
  26.         if(key==arr[mid]) {
  27.             lowBound = mid;
  28.             end = mid-1;
  29.         }
  30.         else if(key<arr[mid]) {
  31.             end = mid-1;
  32.         }
  33.         else begin = mid+1;
  34.     }
  35.     if(lowBound==-1) cout << "Not found\n";
  36.     else cout << "First occurrence at pos: " << lowBound << "(0 indexed)"<< endl;
  37.    
  38.     // searching for the last occurrence of the key value
  39.     begin = 0, end = n-1;
  40.     while(begin<=end) {
  41.         int mid = begin + (end-begin)/2;
  42.         if(key==arr[mid]) {
  43.             upBound = mid;
  44.             begin = mid+1;
  45.         }
  46.         else if(arr[mid]>key) {
  47.             end = mid-1;
  48.         }
  49.         else begin = mid+1;
  50.     }
  51.     if(upBound==-1) cout << "Not found\n";
  52.     else cout << "Last occurrence at pos: " << upBound << "(0 indexed)"<< endl;
  53.     return 0;
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment