#include<bits/stdc++.h>
#define int long long
#define ii pair<int, int>
using namespace std;
const int N = 5e5 + 5;
int n, q;
int a[N];
ii query[N];
namespace sub1 {
  void solve() {
    for(int i = 1; i <= q; ++i) {
      auto [l, r] = query[i];
      int res = 0;
      for(int x = l; x <= r; ++x)
        for(int y = x + 1; y <= r; ++y)
          for(int z = y + (y - x); z <= r; ++z) res = max(res, a[x] + a[y] + a[z]);
      cout << res << '\n';
    }
  }
}
namespace sub2 {
  int f[5'005][5'005], mx[5'005][5'005];
  void solve() {
    for(int i = 1; i <= n; ++i) {
      mx[i][i] = a[i];
      for(int j = i + 1; j <= n; ++j) mx[i][j] = max(mx[i][j - 1], a[j]);
    }
    for(int i = 1; i <= n; ++i)
      for(int j = i + 2; j <= n; ++j)
        f[i][j] = a[i] + a[j] + mx[i + 1][(i + j >> 1)];
    for(int i = n; i; --i)
      for(int j = i + 3; j <= n; ++j) {
        f[i][j] = max({f[i][j], f[i + 1][j], f[i][j - 1]});
        if(j - i - 1 >= 3) f[i][j] = max(f[i][j], f[i + 1][j - 1]);
      }
    for(int i = 1; i <= q; ++i) cout << f[query[i].first][query[i].second] << '\n';
  }
}
int32_t main() {
  cin.tie(0)->sync_with_stdio(0);
  cin >> n;
  for(int i = 1; i <= n; ++i) cin >> a[i];
  cin >> q;
  for(int i = 1; i <= q; ++i) cin >> query[i].first >> query[i].second;
  if(n <= 100 && q <= 100) sub1 :: solve();
  else if(n <= 5'000) sub2 :: solve();
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |