zoukankan      html  css  js  c++  java
  • 牛客小白月赛24 B

    牛客小白月赛24 B


    这道题总的来说很简单
    upper_lound(,,x):返回第一个大于x的数,在这道题中很有用
    要求人数最多,一定是取一整段区间,所以考虑使用滑动窗口
    解析:先把数组排序,我们需要取某一段,这一段的最大-最小<=k,关键是取哪一段。可以对于每个数,往后找,找到第一个减它>k的,这中间一段就满足了任意两个数之差<=k了。找的过程可以用upper_lound(,,x),它返回第一个大于x的数

    #include<iostream>
    #include<algorithm>
    using namespace std;
    #include<cmath>
    const int maxn=2e5+10;
    typedef long long ll;
    ll n,k;
    ll a[maxn];
    int main()
    {
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>k;
    		for(int i=0;i<n;i++)
    		{
    			cin>>a[i];
    		}
    		sort(a,a+n);
    		ll ans = 0;
    		for(int i=0;i<n;i++)
    		{
    			ll md = upper_bound(a,a+n,a[i]+k)-a;    //注意要减去a(数组名)才是下标 
    			ans=max(ans,md-i); //不断更新那个滑动窗口 
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    log4j
    hashContext
    sql语句
    css样式
    作业七:(二)疑问解答
    作业七:(1)翻译
    结对编程作业
    软件优缺点评价(补交)
    C#程序分析
    VS2013安装及测试练习
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/12745731.html
Copyright © 2011-2022 走看看