func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAX = 2e5 + 5;   int n;   pair<int, int> a[MAX];   struct par {     int a, b;     par(int a, int b) : a(a), b(b) {}     bool operator<(const par &p) const { return b < p.b; }   };   multiset<par> s;   multiset<int> sizes;   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i].first);       a[i].second = i;     }     sort(a + 1, a + n + 1);     int best = 1, opt = a[n].first + 1;     for (int i = 1; i <= n; i++) {       if (!sizes.empty()) {         auto x = sizes.begin();         auto y = sizes.rbegin();         int v = a[i - 1].first + 1;         if (*x == *y) {           if ((int)sizes.size() > best) {             best = sizes.size();             opt = v;           } else if ((int)sizes.size() == best && a[i].first < opt)             opt = v;         }       }       auto u = s.upper_bound(par(0, a[i].second));       par intervalo = par(a[i].second, a[i].second);       vector<par> del;       if (u != s.end()) {         auto o = *u;         if (o.a - 1 == a[i].second) {           del.push_back(o);           intervalo.b = o.b;         }       }       if (u != s.begin()) {         u--;         auto o = *u;         if (o.b + 1 == a[i].second) {           del.push_back(o);           intervalo.a = o.a;         }       }       for (auto o : del) {         s.erase(s.find(o));         int sz = o.b - o.a + 1;         sizes.erase(sizes.find(sz));       }       s.insert(intervalo);       sizes.insert(intervalo.b - intervalo.a + 1);     }     printf( %d n , opt);     return 0;   }   