固定下界用二分法求上界O(nlogn)
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n,p;
freopen("1.in", "r", stdin);
scanf("%d%d", &n,&p);
vector<int>v;
int num,i;
for (i = 0; i < n; i++){
scanf("%d", &num);
v.push_back(num);
}
sort(v.begin(),v.end());
int max = 0,maxpos;
for (i = 0; i < n; i++){
long long xx = (long long)v[i] * (long long)p;
if (xx > 1000000000)
maxpos = n - 1;
else maxpos = upper_bound(v.begin(), v.end(), xx) - v.begin() - 1;
int tmp = maxpos - i + 1;
if (tmp > max)
max = tmp;
}
printf("%d\n", max);
return 0;
}