codeforce 1133C. Balanced Team(尺取)

codeforce 1133C. Balanced Team

You are a coach at your local university. There are n students under your supervision, the programming skill of the i-th student is ai.

You have to create a team for a new programming competition. As you know, the more students some team has the more probable its victory is! So you have to create a team with the maximum number of students. But you also know that a team should be balanced. It means that the programming skill of each pair of students in a created team should differ by no more than 5.

Your task is to report the maximum possible number of students in a balanced team.

Input

The first line of the input contains one integer n (1≤n≤2⋅105) — the number of students.

The second line of the input contains n integers a1,a2,…,an (1≤ai≤109), where ai is a programming skill of the i-th student.

Output

Print one integer — the maximum possible number of students in a balanced team.

Examples

inputCopy
6
1 10 17 12 15 2
outputCopy
3
inputCopy
10
1337 1337 1337 1337 1337 1337 1337 1337 1337 1337
outputCopy
10
inputCopy
6
1 1000 10000 10 100 1000000000
outputCopy
1

Hint

Note
In the first example you can create a team with skills [12,17,15].

In the second example you can take all students in a team because their programming skills are equal.

In the third example you can create a team consisting of a single student (and you cannot create a team consisting of at least two students).




题意:

给出一个数的序列, 求出相邻的数相差不超过2的最长序列

题解:

区间子序列问题, 毫无疑问想到了尺取.
注意判断的全面即可.


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define ms(x, n) memset(x,n,sizeof(x));
typedef  long long LL;
const int inf = 1<<30;
const LL maxn = 2*1e5+10;

int n, a[maxn];
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    sort(a+1, a+1+n);
    int ans = 1, sum = 1;
    for(int i = 1, j = 2; j <= n && i <= n && i<=j; ){
        if(a[j]-a[i]<=5)
            sum++, j++;
        else if(a[j]-a[i]>5)
            i++, sum--;
        ans = max(sum, ans);
    }
    cout << ans << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/88380115