#include <bits/stdc++.h>
using namespace std;
int N;
int A[100000];
vector<int> lst;
int C;
int l[2000000], r[2000000], par[2000000], num[2000000];
long long smr[2000000], sml[2000000], rsum[2000000], lsum[2000000];
void fix(int i) {
  if (r[i] == -1) {
    num[i] = num[l[i]];
    smr[i] = smr[l[i]];
    sml[i] = sml[l[i]];
    rsum[i] = rsum[l[i]];
    lsum[i] = lsum[l[i]];
  } else if (l[i] == -1) {
    num[i] = num[r[i]];
    smr[i] = smr[r[i]];
    sml[i] = sml[r[i]];
    rsum[i] = rsum[r[i]];
    lsum[i] = lsum[r[i]];
  } else {
    num[i] = (num[l[i]] + num[r[i]]) % 1000000007;
    sml[i] = (sml[l[i]] + sml[r[i]]) % 1000000007;
    smr[i] = (smr[l[i]] + smr[r[i]]) % 1000000007;
    rsum[i] = (rsum[l[i]] + num[l[i]] * smr[r[i]] + rsum[r[i]]) % 1000000007;
    lsum[i] = (lsum[l[i]] + num[r[i]] * sml[l[i]] + lsum[r[i]]) % 1000000007;
  }
}
void getLeft(int high, long long &t, long long &ct) {
  t = 0;
  ct = 0;
  int j = A[high];
  for (int b = 17; b >= 0; b--) {
    if (high & (1 << b)) {
      if (l[j] != -1) {
        ct = (ct + num[l[j]] * t + lsum[l[j]]) % 1000000007;
        t = (t + sml[l[j]]) % 1000000007;
      }
      j = r[j];
    } else
      j = l[j];
  }
}
void getRight(int low, long long &t, long long &ct) {
  t = 0;
  ct = 0;
  int j = A[low];
  for (int b = 17; b >= 0; b--) {
    if ((low & (1 << b)) == 0) {
      if (r[j] != -1) {
        ct = (ct + num[r[j]] * t + rsum[r[j]]) % 1000000007;
        t = (t + smr[r[j]]) % 1000000007;
      }
      j = l[j];
    } else
      j = r[j];
  }
}
int rval[100000];
int lval[100000];
long long ans;
void add(int j, int i) {
  num[j] = 1, sml[j] = lval[i], smr[j] = rval[i], lsum[j] = rsum[j] = 0;
  while (par[j] != -1) {
    j = par[j];
    fix(j);
  }
  long long lt, lct, rt, rct;
  getLeft(i, lt, lct);
  getRight(i, rt, rct);
  ans = (ans + lval[i] * rct) % 1000000007;
  ans = (ans + lt * rt) % 1000000007;
  ans = (ans + lct * rval[i]) % 1000000007;
}
void del(int j, int i) {
  num[j] = 0, sml[j] = 0, smr[j] = 0, lsum[j] = rsum[j] = 0;
  while (par[j] != -1) {
    j = par[j];
    fix(j);
  }
  long long lt, lct, rt, rct;
  getLeft(i, lt, lct);
  getRight(i, rt, rct);
  ans = (ans + 1000000007 - (lval[i] * rct) % 1000000007) % 1000000007;
  ans = (ans + 1000000007 - (lt * rt) % 1000000007) % 1000000007;
  ans = (ans + 1000000007 - (lct * rval[i]) % 1000000007) % 1000000007;
}
int T[100005];
void init() {
  for (int i = 0; i < 100005; i++) T[i] = 0;
}
void update(int i, int c) {
  for (i++; i < 100005; i += (i & -i)) T[i] += c;
}
int getSum(int i) {
  int c = 0;
  for (i++; i > 0; i -= (i & -i)) c += T[i];
  return c;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  for (int i = 0; i < 2000000; i++) l[i] = r[i] = par[i] = -1;
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> A[i];
    lst.push_back(A[i]);
  }
  sort(lst.begin(), lst.end());
  lst.resize(distance(lst.begin(), unique(lst.begin(), lst.end())));
  for (int i = 0; i < N; i++)
    A[i] = lower_bound(lst.begin(), lst.end(), A[i]) - lst.begin();
  init();
  for (int i = 0; i < N; i++) {
    lval[i] = getSum(A[i]);
    update(A[i], 1);
  }
  init();
  for (int i = N - 1; i >= 0; i--) {
    rval[i] = getSum(A[i]);
    update(A[i], 1);
  }
  C = lst.size();
  for (int i = 0; i < N; i++) {
    int j = A[i];
    for (int b = 17; b >= 0; b--) {
      if (i & (1 << b)) {
        if (r[j] == -1) {
          r[j] = C++;
          par[r[j]] = j;
        }
        j = r[j];
      } else {
        if (l[j] == -1) {
          l[j] = C++;
          par[l[j]] = j;
        }
        j = l[j];
      }
    }
    add(j, i);
  }
  int Q;
  cin >> Q;
  int t, x;
  for (int i = 0; i < Q; i++) {
    cin >> t >> x;
    x--;
    int j = A[x];
    for (int b = 17; b >= 0; b--) {
      if (x & (1 << b))
        j = r[j];
      else
        j = l[j];
    }
    if (t == 1)
      del(j, x);
    else
      add(j, x);
    cout << ans << '\n';
  }
}
