Блог пользователя Gordon-Freeman

Автор Gordon-Freeman, история, 3 месяца назад, По-английски

If i have a sorted vector like this v={ 5,6,7,8,9,10,11 } how can i get the number of elements that are bigger than x? lets say x is 9 so the number of elements bigger than 9 equals 2 how can i code that?

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

»
3 месяца назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

Upper bound

code
  • »
    »
    3 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    lol , i did the exact same but when i compile it , it didn't give me any output and the program ended so i submitted the code anyway to ask what's wrong with it , and it got AC!! any idea why did that happen with my compiler? thanks.

    • »
      »
      »
      3 месяца назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      The below code requires knowledge of binary search.

      #include<bits/stdc++.h>
      using namespace std;
      
      // Upper bound: The smallest index such that arr[ind]>N(Strictly greater than).
      int upperBound(vector<int> arr, int key){  // Here key is the element we want to find upperbound for.
          int low=0,high=arr.size()-1,ans=arr.size();  
          while(low<high){
              int mid=(low+high)/2;
              if(arr[mid]>key) {
                  ans=mid;
                  high=mid-1;
              }
              else low=mid+1;
          }
          return ans;
      }
      
      int main(){
          vector<int> v = {5, 6, 7, 8, 9, 15, 17};
          int num=9;
          int s= upperBound(v,num);
          cout << "Number of elements greater than " << num << " is " << v.size()-s <<endl;
          return 0;
      }
      

      Hope this helps.

    • »
      »
      »
      3 месяца назад, # ^ |
        Проголосовать: нравится +11 Проголосовать: не нравится

      where did you submit ? Can you share the group link so I check the problem?

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

if the array is sorted you can use binary search to get the result in $$$O(log n)$$$ time, also C++ has a prebuilt function named upper_bound which does the same thing, if the array isn't sorted you can sort it first in $$$O(n log n)$$$ time and then use binary search or, iterate over the array and calculate it with a for/while loop in $$$O(n)$$$

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

You can do binary search or use built-in functions in C++ like upper_bound (strictly bigger) or lower_bound (equal or bigger).