94AC - ABC072C: Together

ABC072-C (300 points)
問題

長さ  N の数列  A = \{a_1, a_2, ..., a_N\} の各 i に対し, a_i 1 を足す, 引く, 何もしないのいずれかの操作をする.
この操作の後, ある整数  X を選んで,  a_i = X となる i の個数を数える.
うまく操作を行い,  X を選ぶことで,この個数を最大化する.

  •  0 \leq N \leq 10^5
  •  0 \leq a_i \leq 10^5
  • 入力は全て整数
方針
  • 二つの数 a, b を操作後に同じ数にできるするには  |a - b| \leq 2 が必要.
  •  A の部分列のうち, 最大値と最小値の差が  2 以内に収まるもので最長の部分列の長さを求めれば良い.
  •  A をソートしてしゃくとり.
# input
N = int(input())
A = list(map(int, input().split()))

A = sorted(A)

# しゃくとり
l, r, ans = 0, 0, 0

while r < N:
    if A[r] <= A[l] + 2:
        if r - l + 1 > ans:
            ans = r - l + 1
        r += 1
    else:
        l += 1

print(ans)