Question
每个人都有对应的价值,
个人里选
个人,要求这
个人里任意两个人的差值小于
。求
Solution
sort deque
排个序,从小到大将元素放入双端队列队尾,若头尾差大于,则去掉队头,记录最大的队伍元素个数即可。
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF = 0x3f3f3f3f;
const ll mod = 1e9 + 7;
const ll maxn = 1e6 + 5;
const int N = 2e5 + 5;
ll n,k,a[N];
void solve(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
deque<int>q;
ll ans=0;
for(int i=1;i<=n;i++){
q.push_back(a[i]);
while(q.back()-q.front()>k) q.pop_front();
ans=max(ans,(ll)(q.size()));
}
cout<<ans<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T;cin>>T;
while(T--){
solve();
}
return 0;
}
京公网安备 11010502036488号