この問題はランレングス圧縮のアルゴリズムの一部分ですが、知らなくても解けます。

以下のステップをたどることでこの問題を解くことが出来ます。

  1. 配列内で最も長く同じ数値が連なっている区間の長さ(連続した同じ数字の最長の連続回数)を保持するための変数(ans)を用意する。初期値を0に設定する。
  2. 現在の数字の連続回数を保持する変数( cnt )を用意する。初期値を 11 に設定する。
  3. 0iN10≦i<N-1 について配列 A[i]A[i] の要素を参照する。
    • Ai1=AiA_{i-1} = A_i の場合、 cnt を1増やす。
    • Ai1AiA_{i-1} ≠ A_i の場合、これまでの最長の連続回数( ans )と現在の連続回数( cnt )を比較する。
      cnt の方が大きければ、anscnt に更新する。そして、 cnt11 にリセットする。

※ランレングス圧縮とは
ランレングス圧縮は、ある連続したデータを、そのデータ一つ分と連続した長さで表現することで圧縮するアルゴリズムです。
例えば [2,2,2,2,5,5,3,3,3][2, 2, 2, 2, 5, 5, 3, 3, 3] の場合、 2244 個、 5522 個、3333 個なので、[[2,4],[5,2],[3,3]][[2, 4], [5,2], [3,3]] のように表されます。

Python3
n = int(input())
A = list(map(int,input().split()))
ans = 0
cnt = 1

for i in range(1,n):
    if(A[i-1]==A[i]):
        cnt += 1
    else:
        ans = max(ans,cnt)
        cnt = 1
ans = max(ans,cnt)

print(ans)

以下のように二重ループを回すことでもこの問題を解くことが出来ます。
for 文を 22 回回していますが、計算量は O(N)O(N) です。理由を考えてみてください。
ヒント: break for 文を抜けているということは...

C++
#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	vector<int> a(n);
	for(int i = 0; i < n; i++) cin >> a[i];

	int ans = 1;
	for(int i = 0; i < n; i++){
		int cnt = 0;
		for(int j = i; j < n; j++){
			if(a[i] != a[j])break;
			i = j;
			cnt++;
		}
		ans = max(ans,cnt);
	}
	
	cout << ans << endl;
}

別解

ランレングス圧縮を使った解法です。Pythonでは groupby を使うことで楽に実装することが出来ます。

Python
from itertools import groupby

def to_runLength(S: str): #文字列/リストからラングレス圧縮
    grouped = groupby(S)
    res = []
    for k, v in grouped:
        res.append((k, int(len(list(v)))))
    return res

n = int(input())
A = list(map(int,input().split()))

cnt = to_runLength(A)
ans = 0
for c in cnt:
    ans = max(ans,c[1])

print(ans)