可以用双指针(尺取法),也可以枚举起点,二分终点。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std; int n;
long long k;
long long a[ + ]; int main()
{
scanf("%d%lld", &n, &k);
for (int i = ; i <= n; i++) scanf("%lld", &a[i]);
sort(a + , a + + n);
int ans = ;
for (int i = ; i <= n; i++)
{
int p;
int L = i, R = n;
while (L <= R)
{
int mid = (L + R) / ;
if (a[mid] <= a[i] * k)
{
p = mid;
L = mid + ;
}
else R = mid - ;
}
ans = max(ans, p - i + );
}
printf("%d\n", ans);
return ;
}