#include <iostream>
#include <cstdio>
using namespace std;
// 本程序的關鍵。 以中間的數字爲界限。 確定左右起始和終止界限
void split(int s[], int n, int &l, int &r)
{
int mid = n/2;
for(l=0; l<n; ++l)
{
if (s[l] == s[mid])
break;
}
for(r=l+1; r<n; ++r)
{
if (s[r] != s[mid])
break;
}
}
// num 衆數。 maxCnt 重數
void getMaxCnt(int &mid, int &maxCnt, int s[], int n)
{
int l, r;
split(s, n, l, r); // 進行分割。這個函數是本程序的關鍵
int num = n/2;
int cnt = r-l;
// update
if (cnt > maxCnt)
{
maxCnt = cnt;
mid = s[num];
}
// l 表示左邊的個數。左邊的個數必須大於 maxCnt 纔有必要搜尋
if (l+1 > maxCnt)
{
getMaxCnt(mid, maxCnt, s, l+1);
}
// 右邊搜尋, 右邊數組的起始地址要變更
if (n-r > maxCnt)
{
getMaxCnt(mid, maxCnt, s+r, n-r);
}
}
int main(void)
{
int s[] = {1, 2, 2, 2, 3, 3, 5, 6, 6, 6, 6};
int n = sizeof(s)/sizeof(s[0]);
int maxCnt = 0;
int num = 0;
getMaxCnt(num, maxCnt, s, n);
printf("%d %d\n", num, maxCnt);
return 0;
}