解题思路:首先可以得到答案肯定是n个数里面的一个数+1,那么我们从大到小枚举它们,将它们之间的间隔距离和位置用set维护,当维护间隔距离的set里面的数都相等时,说明所有的间隔距离都一样,那么第i个数的值+1是一个可行解。注意n为1的时候要特判。
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int mx = 1e5 + 10;
set <int> st;
set <pair<int,int>> past;
multiset <int> mulst;
int n;
int main()
{
scanf("%d",&n);
st.insert(0);st.insert(n+1);
mulst.insert(n);
int x;
for(int i=1;i<=n;i++){
scanf("%d",&x);
past.insert(make_pair(x,i));
}
if(n==1) return 0*printf("%d\n",past.begin()->fi+1);
int ans = 0,cnt = 0;
for(int i=1;i<=n;i++){
auto it = --past.end();
int pos = it->se;
auto l = st.lower_bound(pos),r = l--;
//cout <<*r << " " <<*l << endl;
mulst.erase(mulst.find(*r-*l-1));
if(pos-*l-1) mulst.insert(pos-*l-1);
if(*r-pos-1) mulst.insert(*r-pos-1);
if(mulst.size()&&*mulst.begin()==*(--mulst.end())){
if(mulst.size()>=cnt){
cnt = mulst.size();
auto it1 = it;it1--;
ans = it1->fi + 1;
}
}
past.erase(it);
st.insert(it->se);
///cout << 1 << endl;
}
printf("%d\n",ans);
return 0;
}