#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n,p,a[100100];
cin>>n>>p;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
int ans=1;
for(int i=0;i<n;i++)
{
int j=upper_bound(a+i+1,a+n,(long long )a[i]*p)-a;
ans=max(ans,j-i);
}
cout<<ans;
system("pause");
return 0;
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n,p,a[100100];
cin>>n>>p;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
int ans=1;
for(int i=0;i<n;i++)
{
int j=upper_bound(a+i+1,a+n,(long long )a[i]*p)-a;
ans=max(ans,j-i);
}
cout<<ans;
system("pause");
return 0;
}
注意点:
1.
对于upper_bound来说,返回的是被查序列中第一个大于查找值的指针,也就是返回指向被查值>查找值的最小指针, lower_bound则是返回的是被查序列中第一个大于等于查找值的指针,也就是返回指向被查值>=查找值的最小指针。