CodeForces 1133C Balanced Team

http://codeforces.com/contest/1133/problem/C
time limit per test 2 seconds
memory limit per test 256 megabytes
inputstandard input
outputstandard output


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

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⋅10^5$) — the number of students.

The second line of the input contains $n$ integers $a_1,a_2,…,a_n$($1≤a_i≤10^9$), where $a_i$ is a programming skill of the i-th student.

Output

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

Examples

input

6
1 10 17 12 15 2

output

3

input

10
1337 1337 1337 1337 1337 1337 1337 1337 1337 1337

output

10

input

6
1 1000 10000 10 100 1000000000

output

1

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).

 

解题思路

  官方:Let's sort all values in non-decreasing order. Then we can use two pointers to calculate for each student ?i the maximum number of students j such that $a_j−a_i≤5$ ($j>i$). This is pretty standard approach. We also can use binary search to do it (or we can store for each programming skill the number of students with this skill and just iterate from some skill $x$ to $x+5$ and sum up all numbers of students).

  我比赛时用map离散化了一下,再套上桶排,然后才跑双指针……大概是前两题都用到桶,思维被死死限制住了……

源代码 

 1 #include<stdio.h>
 2 #include<algorithm>
 3 
 4 int n,k;
 5 
 6 int a[200010];
 7 
 8 int main()
 9 {
10     //freopen("test.in","r",stdin);
11     scanf("%d",&n);
12     for(int i=0;i<n;i++)
13         scanf("%d",a+i);
14     std::sort(a,a+n);
15     int ans=0;
16     int j=0;
17     for(int i=0;i<n;i++)
18     {
19         while(j<n&&a[j]-a[i]<=5)
20         {
21             j++;
22             ans=std::max(j-i,ans);
23         }
24     }
25     printf("%d\n",ans);
26     return 0;
27 }

 

转载于:https://www.cnblogs.com/wawcac-blog/p/10499708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值