#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100000000;
int q[maxn];
pair<int,int> getMostNum(int l,int r)
{
if(l>r) return {-1,0};
if(l==r) return {1,q[l]};
int mid=(r-l)/2+l;
int i=mid,j=mid;
while(i-1>=l&&q[i-1]==q[mid]) i--;
while(j+1<=r&&q[j+1]==q[mid]) j++;
int m=j-i+1;
pair<int,int> ans={m,q[mid]},tmp;
if(i-l>m)
{
tmp=getMostNum(l,i-1);
if(tmp.first>ans.first) ans=tmp;
}
if(r-j>m)
{
tmp=getMostNum(j+1,r);
if(tmp.first>ans.first) ans=tmp;
}
return ans;
}
int main()
{
int N;
cin>>N;
for(int i=0;i<N;++i) cin>>q[i];
sort(q,q+N);
auto ans=getMostNum(0,N-1);
cout<<ans.second<<"\n"<<ans.first;
}
~
找了好长时间bug啊,那个判断右边的mostnum的时候,应该和ans判断,我刚开始和m判断的,找了好久,也是第一次在找bug的时候借助了堆栈。