【1085 25 双指针】 Perfect Sequence

传送门

题意

给定\(n\)个数\(a_{i}\)和一个\(p\),从中选出尽可能多的数使得满足\(max\leq p\times min\),输出数的个数

数据范围

\(n\leq 10^{5}\)
\(a_{i},p\leq 10^{9}\)

题解

  • 最后一组数据爆int,用long long
  • 排序后双指针即可

Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	int n; ll p; cin>>n>>p;
	vector<ll>a(n);
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a.begin(),a.end());
	int i=0,j=0,ans=0;
	while(i<n && j<n){
		if(a[i]*p>=a[j]) ans=max(j-i+1,ans),j++;
		else while(i<j && a[i]*p<a[j]) i++;
	}
	cout<<ans<<endl;
}
posted @ 2021-03-06 17:16  Hyx'  阅读(52)  评论(0)    收藏  举报