Advertisement
DimovIvan

C++Advanced-Regular Exam-Ranges2

May 13th, 2022
986
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<utility>
  4. #include<string>
  5. #include<algorithm>
  6. #include<map>
  7.  
  8. const int mapsCount = 2;
  9. const int lowLimits = 0;
  10. const int highLimits = 1;
  11.  
  12. std::vector<std::map<int, int>> readInputRanges() {
  13.     std::vector<std::map<int, int>> vec{ mapsCount };
  14.  
  15.     const std::string delimiter = ".";
  16.     std::string numbAsStr;
  17.     int numbersCount = 0;
  18.     int oddId = 0;
  19.     int evenId = 0;
  20.     while (true)
  21.     {
  22.         std::cin >> numbAsStr;
  23.         if (numbAsStr == delimiter)
  24.         {
  25.             break;
  26.         }
  27.         numbersCount++;
  28.         if (numbersCount & 1)
  29.         {
  30.             int currLowLimit = std::stoi(numbAsStr);
  31.             vec[lowLimits][currLowLimit] = oddId;
  32.             oddId++;
  33.         }
  34.         else
  35.         {
  36.             int currHighLimit = std::stoi(numbAsStr);
  37.             vec[highLimits][currHighLimit] = evenId;
  38.             evenId++;
  39.         }
  40.     }
  41.     return vec;
  42. }
  43. std::vector<int> readQueries() {
  44.     std::vector<int> queries{};
  45.  
  46.     //const std::string delimiter = ".";
  47.     int query = 0;
  48.     std::cin >> query;
  49.     while (!std::cin.fail())
  50.     {
  51.         queries.push_back(query);
  52.         std::cin >> query;
  53.     }
  54.     std::cin.clear();
  55.  
  56.     return queries;
  57. }
  58.  
  59. void printSolution(const std::vector<std::map<int, int>>& ranges, const std::vector<int>& queries) {
  60.     const size_t queriesSize = queries.size();
  61.     for (size_t i = 0; i < queriesSize; i++)
  62.     {
  63.         auto low = ranges[lowLimits].upper_bound(queries[i]);
  64.         auto high = ranges[highLimits].lower_bound(queries[i]);
  65.         if (high != ranges[highLimits].end())
  66.         {
  67.             bool isRange = low != ranges[lowLimits].begin() && ((--low)->second == high->second);
  68.             if (isRange)
  69.             {
  70.                 std::cout << "in" << std::endl;
  71.             }
  72.             else
  73.             {
  74.                 std::cout << "out" << std::endl;
  75.             }
  76.         }
  77.         else
  78.         {
  79.             std::cout << "out" << std::endl;
  80.         }
  81.     }
  82. }
  83.  
  84. int main() {
  85.     const std::vector<std::map<int, int>> ranges = readInputRanges();
  86.     const std::vector<int> queries = readQueries();
  87.     printSolution(ranges, queries);
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement