Advertisement
gfg9

Untitled

Jul 30th, 2023 (edited)
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | Source Code | 0 0
  1. //User function Template for C++
  2.  
  3. class Solution {
  4. public:
  5.  
  6.     int getFirstIndex_ProductGreaterThanorEqualToX(int i, vector<int>&nums, int p, int x){
  7.        
  8.         int l=i-1;
  9.         int r=nums.size();
  10.        
  11.         while(r>l+1){
  12.             int m = (l+r)/2;
  13.             if(nums[m] >= (x/p)+(x%p!=0)){
  14.                 r=m;
  15.             }else{
  16.                 l=m;
  17.             }
  18.         }
  19.        
  20.         return r==i-1?-1:r;
  21.     }
  22.    
  23.     int getLastIndex_ProductLessThanorEqualToY(int i, vector<int>&nums, int p, int y){
  24.        
  25.         int l=i-1;
  26.         int r=nums.size();
  27.        
  28.         while(r>l+1){
  29.             int m = (l+r)/2;
  30.             if(nums[m] <= y/p){
  31.                 l=m;
  32.             }else{
  33.                 r=m;
  34.             }
  35.         }
  36.        
  37.         return l==i-1?-1:l;
  38.     }
  39.    
  40.     int TotalPairs(vector<int>&nums, int x, int y){
  41.         // Code here
  42.        
  43.         int n = nums.size();
  44.         sort(nums.begin(), nums.end());
  45.         if(n==1) return 0;
  46.         if(nums[0]*nums[1]>y || nums[n-1]*nums[n-2]<x) return 0;
  47.        
  48.         int ans=0;
  49.  
  50.         for(int i=0;i+1<n;i++){
  51.             //FFFFTTTT
  52.            // int l = getFirstIndex_ProductGreaterThanorEqualToX(i+1, nums, nums[i], x); //lowerbound
  53.             //TTTTFFFF
  54.            // int r = getLastIndex_ProductLessThanorEqualToY(i+1, nums, nums[i], y); // Or firstIndexWhereProductGreaterThanY - 1 : upperbound
  55.            int p = nums[i];
  56.            
  57.            int l = lower_bound(nums.begin()+i+1, nums.end(), (x/p)+(x%p!=0) ) - nums.begin();
  58.            int r = upper_bound(nums.begin()+i+1, nums.end(), (y/p)) - nums.begin()-1;
  59.          
  60.             if(l!=-1 && r!=-1 && l<=r)
  61.                 ans+=(r-l+1);
  62.         }
  63.        
  64.         return ans;
  65.     }
  66. };
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement