int N;
vi t, a, laz1, laz2;
// laz1 stores the aggregate of the multiplications
// laz2 stores the aggregate the additions
void build(int u, int l, int r) {
if (l == r) {
t[u] = a[l];
} else {
int mid = (l + r)/2;
build(2 * u, l, mid);
build(2 * u + 1, mid+1, r);
t[u] = t[2 * u] + t[2 * u + 1];
}
}
void addd(int u) { // lazy propagation for additions
laz2[2 * u] += laz2[u];
laz2[2 * u + 1] += laz2[u];
t[2 * u] += laz2[u];
t[2 * u + 1] += laz2[u];
laz2[u] = 0;
}
void multiply(int u) { // lazy propagation for multiplication
laz1[2 * u] *= laz1[u];
laz1[2 * u + 1] *= laz1[u];
t[2 * u] *= laz1[u];
t[2 * u + 1] *= laz1[u];
laz1[u] = 1;
}
void mult(int u, int tl, int tr, int l, int r, int val) {
if (l > r) return;
if (tl == l && tr == r) {
t[u] *= val;
laz1[u] *= val;
} else {
int mid = (tl + tr)/2;
multiply(u);
addd(u);
mult(2 * u, tl, mid, l, min(mid, r), val);
mult(2 * u + 1, mid+1, tr, max(mid+1, l), r, val);
t[u] = t[2 * u] + t[2 * u + 1];
}
}
void add(int u, int tl, int tr, int l, int r, int val) {
if (l > r) return;
if (tl == l && tr == r) {
t[u] += val;
laz2[u] += val;
} else {
int mid = (tl + tr)/2;
multiply(u);
addd(u);
add(2 * u, tl, mid, l, min(mid, r), val);
add(2 * u + 1, mid+1, tr, max(mid+1, l), r, val);
t[u] = t[2 * u] + t[2 * u + 1];
}
}
int main() {
setIO("");
cin >> N;
t.rsz(4 * N, 0), a.rsz(N), laz1.rsz(4 * N, 1), laz2.rsz(4 * N, 0);
for (int i = 0; i < N; ++i) {
cin >> a[i];
}
build(1, 0, N-1);
int Q;
cin >> Q;
while (Q--) {
int l, r;
cin >> l >> r;
l--, r--;
mult(1, 0, N-1, l, r, 2);
add(1, 0, N-1, l, r, 1);
cout << t[1] << endl;
}
}