Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //User function Template for C++
- class Solution {
- public:
- int getFirstIndex_ProductGreaterThanorEqualToX(int i, vector<int>&nums, int p, int x){
- int l=i-1;
- int r=nums.size();
- while(r>l+1){
- int m = (l+r)/2;
- if(nums[m] >= (x/p)+(x%p!=0)){
- r=m;
- }else{
- l=m;
- }
- }
- return r==i-1?-1:r;
- }
- int getLastIndex_ProductLessThanorEqualToY(int i, vector<int>&nums, int p, int y){
- int l=i-1;
- int r=nums.size();
- while(r>l+1){
- int m = (l+r)/2;
- if(nums[m] <= y/p){
- l=m;
- }else{
- r=m;
- }
- }
- return l==i-1?-1:l;
- }
- int TotalPairs(vector<int>&nums, int x, int y){
- // Code here
- int n = nums.size();
- sort(nums.begin(), nums.end());
- if(n==1) return 0;
- if(nums[0]*nums[1]>y || nums[n-1]*nums[n-2]<x) return 0;
- int ans=0;
- for(int i=0;i+1<n;i++){
- //FFFFTTTT
- // int l = getFirstIndex_ProductGreaterThanorEqualToX(i+1, nums, nums[i], x); //lowerbound
- //TTTTFFFF
- // int r = getLastIndex_ProductLessThanorEqualToY(i+1, nums, nums[i], y); // Or firstIndexWhereProductGreaterThanY - 1 : upperbound
- int p = nums[i];
- int l = lower_bound(nums.begin()+i+1, nums.end(), (x/p)+(x%p!=0) ) - nums.begin();
- int r = upper_bound(nums.begin()+i+1, nums.end(), (y/p)) - nums.begin()-1;
- if(l!=-1 && r!=-1 && l<=r)
- ans+=(r-l+1);
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement