#include <bits/stdc++.h>
const int N = 100005;
using namespace std;
long long t[1 << 20], tag[1 << 20], m;
void build(int k, int l, int r) {
  if (l == r - 1) return;
  build(k * 2 + 1, l, (l + r) >> 1);
  build(k * 2 + 2, (l + r) >> 1, r);
  t[k] = max(t[k * 2 + 1], t[k * 2 + 2]);
}
void push(int k) {
  if (tag[k] == -1) return;
  t[k] = tag[k];
  t[k * 2 + 1] = tag[k * 2 + 1] = tag[k];
  t[k * 2 + 2] = tag[k * 2 + 2] = tag[k];
  tag[k] = -1;
}
long long query(int k, int l, int r, int a, int b) {
  if (a >= r || b <= l) return -1;
  if (a <= l && b >= r) return t[k];
  push(k);
  long long p = query(k * 2 + 1, l, (l + r) >> 1, a, b);
  long long q = query(k * 2 + 2, (l + r) >> 1, r, a, b);
  return max(p, q);
}
void update(int k, int l, int r, int a, int b, long long x) {
  if (a >= r || b <= l) return;
  if (a <= l && b >= r) {
    t[k] = tag[k] = x;
    return;
  }
  push(k);
  update(k * 2 + 1, l, (l + r) >> 1, a, b, x);
  update(k * 2 + 2, (l + r) >> 1, r, a, b, x);
  t[k] = max(t[k * 2 + 1], t[k * 2 + 2]);
}
int main() {
  int n, q;
  scanf("%d", &n);
  int i, m = 1;
  while (m < n) m <<= 1;
  memset(t, -1, sizeof(t));
  memset(tag, -1, sizeof(tag));
  for (i = 0; i < n; i++) scanf("%I64d", &t[i + m - 1]);
  build(0, 0, m);
  scanf("%d", &q);
  int w, h;
  long long p;
  while (q--) {
    scanf("%d%d", &w, &h);
    p = query(0, 0, m, 0, w);
    printf("%I64d\n", p);
    update(0, 0, m, 0, w, p + (long long)h);
  }
  return 0;
}
