#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 20;
long long n, m, a[N * 4], h, w;
struct tree {
  long long Max;
  bool ok;
  tree() { ok = 0; }
} t[N * 4];
void push(int v) {
  if (!t[v].ok) return;
  t[v].ok = 0;
  t[v * 2].ok = 1;
  t[v * 2 + 1].ok = 1;
  t[v * 2].Max = t[v].Max;
  t[v * 2 + 1].Max = t[v].Max;
}
void update(int v, int L, int R, int l, int r, long long tmp) {
  if (l <= L && r >= R) {
    t[v].ok = 1;
    t[v].Max = tmp;
    return;
  }
  if (L != R) push(v);
  if (L > r || R < l) return;
  int m = (L + R);
  m >>= 1;
  update(v * 2, L, m, l, r, tmp);
  update(v * 2 + 1, m + 1, R, l, r, tmp);
  t[v].Max = max(t[v * 2].Max, t[v * 2 + 1].Max);
}
long long get(int v, int L, int R, int l, int r) {
  if (l <= L && r >= R) return t[v].Max;
  if (L != R) push(v);
  if (L > r || R < l) return 0;
  int m = (L + R);
  m >>= 1;
  long long ans = max(get(v * 2, L, m, l, r), get(v * 2 + 1, m + 1, R, l, r));
  t[v].Max = max(t[v * 2].Max, t[v * 2 + 1].Max);
  return ans;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    update(1, 1, N, i, i, a[i]);
  }
  cin >> m;
  for (int i = 1; i <= m; ++i) {
    cin >> w >> h;
    long long k = get(1, 1, N, 1, w);
    cout << k << endl;
    update(1, 1, N, 1, w, h + k);
  }
}
