#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3fffffff;
const int maxn = 100005;
int n, m;
struct ST {
  int l, r;
  long long val, maxx;
} st[maxn * 3];
void build(int l, int r, int id) {
  st[id].l = l, st[id].r = r;
  st[id].val = st[id].maxx = 0LL;
  if (l == r) return;
  build(l, (l + r) / 2, id * 2);
  build((l + r) / 2 + 1, r, id * 2 + 1);
}
void update(int id, int l, int r, long long val) {
  if (st[id].l == l && st[id].r == r) {
    st[id].val = val;
    st[id].maxx = val;
    return;
  }
  int m = (st[id].l + st[id].r) / 2;
  if (r <= m)
    update(id * 2, l, r, val);
  else if (l > m)
    update(id * 2 + 1, l, r, val);
  else
    update(id * 2, l, m, val), update(id * 2 + 1, m + 1, r, val);
  st[id].maxx = max(st[id * 2].maxx, st[id * 2 + 1].maxx);
}
long long ans;
void query(int id, int l, int r) {
  ans = max(ans, st[id].val);
  if (st[id].l == l && st[id].r == r) {
    ans = max(ans, st[id].maxx);
    return;
  }
  int m = (st[id].l + st[id].r) / 2;
  if (r <= m)
    query(id * 2, l, r);
  else if (l > m)
    query(id * 2 + 1, l, r);
  else
    query(id * 2, l, m), query(id * 2 + 1, m + 1, r);
}
int main() {
  scanf("%d", &n);
  build(1, n, 1);
  for (int i = 1; i <= n; i++) {
    long long x;
    scanf("%I64d", &x);
    update(1, i, i, x);
  }
  scanf("%d", &m);
  while (m--) {
    int w;
    long long h;
    scanf("%d%I64d", &w, &h);
    ans = -1;
    query(1, 1, w);
    printf("%I64d\n", ans);
    update(1, 1, w, ans + h);
  }
  return 0;
}
