Advertisement
AlexDanilin

Урок 10: Не худший случай

Aug 3rd, 2023
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cmath>
  3. #include <cstdint>
  4. #include <iostream>
  5. #include <random>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. int EffectiveCount(const vector<int>& v, int n, int i) {
  11.     // место для вашего решения
  12.     int limit = static_cast<int64_t>(v.size())*(i + 1)/(n + 1);
  13.     if (limit < log2(v.size())) { // хороший случай
  14.         cout << "Using find_if\n"s;
  15.         auto predicat = [i](int limit) { return limit > i; };
  16.         auto it = find_if(v.begin(), v.end(), predicat);
  17.         return it - v.begin();
  18.     } else { // нехороший случай
  19.         cout << "Using upper_bound\n"s;
  20.         auto it = upper_bound(v.begin(), v.end(), i);
  21.         return it - v.begin();
  22.     }
  23. }
  24.  
  25. int main() {
  26.     static const int NUMBERS = 1'000'000;
  27.     static const int MAX = 1'000'000'000;
  28.  
  29.    mt19937 r;
  30.    uniform_int_distribution<int> uniform_dist(0, MAX);
  31.  
  32.    vector<int> nums;
  33.    for (int i = 0; i < NUMBERS; ++i) {
  34.        int random_number = uniform_dist(r);
  35.        nums.push_back(random_number);
  36.    }
  37.    sort(nums.begin(), nums.end());
  38.  
  39.    int i;
  40.    cin >> i;
  41.    int result = EffectiveCount(nums, MAX, i);
  42.    cout << "Total numbers before "s << i << ": "s << result << endl;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement