注意!p有可能超过int的范围,应该定义成long long,否则测试点5会答案错误
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int seq[100010];
int upper_bound(int left,int right,long long m){
int mid;
while(left < right){
mid = (left + right) >> 1;
if(seq[mid] > m)
right = mid;
else
left = mid + 1;
}
return left;
}
int main(){
int n;
long long p;
scanf("%d %lld",&n,&p);
for(int i = 0;i < n;i++){
scanf("%d",&seq[i]);
}
sort(seq,seq + n);
int maxLength = 0;
for(int i = 0;i < n;i++){
long long m = p * seq[i];
if(m >= seq[n - 1]){
if(n - i > maxLength){
maxLength = n - i;
break;
}
}
int x = upper_bound(0,n - 1,m);
x--;
if(x - i + 1 > maxLength)
maxLength = x - i + 1;
}
printf("%d",maxLength);
system("pause");
return 0;
}