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;
}