1085 Perfect Sequence (25 分)
思路
二分查找,大于某个值的数字下标
用到sort、upper_bound
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[6]={
2,3,6,7,23,45};
sort(num,num+6); //按从小到大排序
int pos1=lower_bound(num,num+6,7)-num; //返回数组中第一个大于或等于被查数的值
int pos2=upper_bound(num,num+6,7)-num; //返回数组中第一个大于被查数的值
cout<<pos1<<" "<<num[pos1]<<endl;
cout<<pos2<<" "<<num[pos2]<<endl;
return 0;
}
#输出
3 7
4 23
算法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
long long num[100005];
cin>>n>>k;
for(int i = 0;i<n;i++)
scanf("%lld",&num[i]);
sort(num,num+n);
int len = 0;
for(int i = 0;i<n;i++){
int j = upper_bound(num+i+1,num+n,num[i]*k)-num;
len = max(len,j-i);
}
cout<<len<<endl;
}