Punchcard

Untitled

Aug 17th, 2023
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | Software | 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.     double expected = (v.size() / (n + 1)) * (i + 1);
  13.     double treshold = log2(v.size());
  14.    
  15.     int found = 0;
  16.    
  17.     if (expected <= treshold) {
  18.         cout << "Using find_if"s << endl;
  19.         auto it = find_if(v.begin(), v.end(), [i](int vv){ return vv > i;});
  20.         found = distance(v.begin(), it);
  21.     }
  22.     else {     
  23.         cout << "Using upper_bound"s << endl;
  24.         auto it = upper_bound(v.begin(), v.end(), i);
  25.         found = distance(v.begin(), it);
  26.     }  
  27.     return found;
  28. }
  29.  
  30. int main() {
  31.     static const int NUMBERS = 1'000'000;
  32.     static const int MAX = 1'000'000'000;
  33.  
  34.    mt19937 r;
  35.    uniform_int_distribution<int> uniform_dist(0, MAX);
  36.  
  37.    vector<int> nums;
  38.    for (int i = 0; i < NUMBERS; ++i) {
  39.        int random_number = uniform_dist(r);
  40.        nums.push_back(random_number);
  41.    }
  42.    sort(nums.begin(), nums.end());
  43.  
  44.    int i;
  45.    cin >> i;
  46.    int result = EffectiveCount(nums, MAX, i);
  47.    cout << "Total numbers before "s << i << ": "s << result << endl;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment