HRusev

Ranges(binarySearch)

Jun 5th, 2023
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | Source Code | 0 0
  1. // 02. Ranges.cpp : This file contains the 'main' function. Program execution begins and ends there.
  2. //
  3.  
  4. #include <iostream>
  5. #include<string>
  6. #include <sstream>
  7. #include <set>
  8. #include <algorithm>
  9. #include <queue>
  10. #include <vector>
  11.  
  12. using namespace std;
  13.  
  14.  
  15. int binarySearch(vector<int>& range, int seek)
  16. {
  17.     int n = range.size(), first = 0, last = n - 1, mid;
  18.     while (first <= last)
  19.     {
  20.         mid = first + (last - first + 1) / 2;
  21.  
  22.         if (range[mid] <= seek)
  23.         {
  24.             if(mid < range.size()-1)
  25.                 if(range[mid +1] > seek)
  26.                     return mid;
  27.                 else
  28.                     first = mid + 1;
  29.             else
  30.                 return mid;
  31.         }
  32.  
  33.         else if(range[mid] > seek)
  34.         {
  35.             last = mid - 1;
  36.         }
  37.         else
  38.         {
  39.             first = mid + 1;
  40.         }
  41.     }
  42.  
  43.     return -1;
  44. }
  45.  
  46. int main()
  47. {
  48.  
  49.     vector<int> rangeFrom;
  50.     vector<int> rangeTo;
  51.  
  52.     string input;
  53.  
  54.     while (true)
  55.     {
  56.         pair <int, int> member;
  57.         getline(cin, input);
  58.         if (input == ".")
  59.             break;
  60.  
  61.         istringstream istr(input);
  62.  
  63.  
  64.         istr >> member.first;
  65.         istr >> member.second;
  66.         rangeFrom.push_back(member.first);
  67.         rangeTo.push_back(member.second);
  68.  
  69.     }
  70.  
  71.  
  72.     sort(rangeFrom.begin(), rangeFrom.end());
  73.     sort(rangeTo.begin(), rangeTo.end());
  74.  
  75.  
  76.     int idx;
  77.     while (true)
  78.     {
  79.         getline(cin, input);
  80.         if (input == ".")
  81.             break;
  82.  
  83.         istringstream istr(input);
  84.         int num;
  85.         istr >> num;
  86.  
  87.         idx = binarySearch(rangeFrom, num);
  88.         if (idx >= 0 && rangeTo[idx] >= num)
  89.             cout << "in" << endl;
  90.         else
  91.             cout << "out" << endl;
  92.     }
  93.  
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment