思路
对数组排序后,令i j同时指向第一个元素,i向后移动,当a[i] > a[j] * p时,j向后移动
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long a[N];
long n, p;
int ans;
int main()
{
cin >> n >> p;
for(int i = 0; i < n; i ++)
cin >> a[i];
sort(a, a + n);
for(int i = 0, j = 0; i < n; i ++)
{
while(a[i] > a[j] * p)
j ++;
ans = max(ans, i - j + 1);
}
cout << ans;
}