#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define int long long #define double long double typedef vector VI; typedef pair pii; typedef vector VP; typedef vector VS; typedef priority_queue PQ; templatebool chmax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if (b < a) { a = b; return 1; } return 0; } #define fore(i,a) for(auto &i:a) #define REP(i,n) for(int i=0;i, greater > q2; signed main() { cin.tie(0); ios::sync_with_stdio(false); int N; cin >> N; VI A(N); setS1, S2; REP(i, N) { cin >> A[i]; if (i > 1)S2.insert(A[i]); } S1.insert(A[0]); int ans = INF; VI mi1(N, INF), mi2(N, INF); mi1[0] = A[0]; mi2[N - 1] = A[N - 1]; FOR(i, 1, N)mi1[i] = min(mi1[i - 1], A[i]); for (int i = N - 2; i >= 0; i--)mi2[i] = min(mi2[i + 1], A[i]); FOR(i, 1, N - 1) { if (mi1[i - 1] < A[i] && mi2[i + 1] < A[i]) { chmin(ans, A[i] + mi1[i - 1] + mi2[i + 1]); } auto it1 = S1.lower_bound(A[i]); auto it2 = S2.lower_bound(A[i]); if (it1 != S1.end() && it2 != S2.end()) { chmin(ans, *it1 + *it2 + A[i]); } S2.erase(S2.find(A[i + 1])); S1.insert(A[i]); } if (ans == INF)ans = -1; cout << ans << endl; return 0; }