Advertisement
kutuzzzov

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

Nov 9th, 2022
1,298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 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.     int limit = static_cast<int64_t>(v.size())*(i + 1)/(n + 1);
  12.     if (limit < log2(v.size())) { // хороший случай
  13.         cout << "Using find_if\n"s;
  14.         auto predicat = [i](int limit) { return limit > i; };
  15.         auto it = find_if(v.begin(), v.end(), predicat);
  16.         return it - v.begin();
  17.     } else { // нехороший случай
  18.         cout << "Using upper_bound\n"s;
  19.         auto it = upper_bound(v.begin(), v.end(), i);
  20.         return it - v.begin();
  21.     }
  22. }
  23.  
  24. int main() {
  25.     static const int NUMBERS = 1'000'000;
  26.     static const int MAX = 1'000'000'000;
  27.  
  28.    mt19937 r;
  29.    uniform_int_distribution<int> uniform_dist(0, MAX);
  30.  
  31.    vector<int> nums;
  32.    for (int i = 0; i < NUMBERS; ++i) {
  33.        int random_number = uniform_dist(r);
  34.        nums.push_back(random_number);
  35.    }
  36.    sort(nums.begin(), nums.end());
  37.  
  38.    int i;
  39.    cin >> i;
  40.    int result = EffectiveCount(nums, MAX, i);
  41.    cout << "Total numbers before "s << i << ": "s << result << endl;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement