#include <bits/stdc++.h>
using namespace std;
struct node {
  long long val;
  long long cha;
  long long lef;
  long long rig;
};
long long n, a[100020], m, t1, t2, ans[100020];
node st[1000020];
void make_tree(int x, int le, int ri) {
  if (le > ri) return;
  st[x].cha = 0;
  st[x].lef = le;
  st[x].rig = ri;
  if (le == ri) {
    st[x].val = a[le];
    return;
  }
  make_tree(x * 2, le, (le + ri) / 2);
  make_tree(x * 2 + 1, (le + ri) / 2 + 1, ri);
}
long long take_value(int now, int x) {
  if (st[now].lef == x && st[now].rig == x) {
    if (st[now].cha != 0 && st[now].cha > st[now].val)
      st[now].val = st[now].cha;
    st[now].cha = 0;
    return st[now].val;
  }
  if (st[now].cha != 0) {
    st[now * 2].cha = st[now].cha;
    st[now * 2 + 1].cha = st[now].cha;
    st[now].cha = 0;
  }
  if ((st[now].rig + st[now].lef) / 2 >= x) return take_value(now * 2, x);
  return take_value(now * 2 + 1, x);
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  make_tree(1, 1, n);
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> t1 >> t2;
    ans[i] = take_value(1, t1);
    st[1].cha = t2 + ans[i];
  }
  for (int i = 1; i <= m; i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
