#include <bits/stdc++.h>
using namespace std;
struct State {
  long long cnt;
  long long left;
  long long right;
  long long res;
  State() : cnt(0), left(0), right(0), res(0) {}
  State(long long cnt, long long left, long long right, long long res)
      : cnt(cnt), left(left), right(right), res(res) {}
};
int A[1 << 18];
int T[1 << 18];
int L[1 << 18];
int R[1 << 18];
long long X[1 << 18];
long long Z[1 << 18];
State RMQ[2 << 18];
int I[18 + 1];
void update(int level, int pos, int a, int value) {
  int from = pos << level;
  int to = (pos + 1) << level;
  if (a < from || to <= a) return;
  State& parent = RMQ[I[level] + pos];
  if (level == 0) {
    parent.cnt = value;
    parent.left = 0;
    parent.right = value * (Z[a + 1] - Z[a]);
    parent.res = 0;
    return;
  }
  int mid = (to + from) >> 1;
  update(level - 1, pos + pos, a, value);
  update(level - 1, pos + pos + 1, a, value);
  State& left = RMQ[I[level - 1] + pos + pos];
  State& right = RMQ[I[level - 1] + pos + pos + 1];
  parent.cnt = left.cnt + right.cnt;
  parent.left = left.left + right.left + right.cnt * (Z[mid] - Z[from]);
  parent.right = right.right + left.right + left.cnt * (Z[to] - Z[mid]);
  parent.res =
      left.res + right.res + left.right * right.cnt + right.left * left.cnt;
}
State find(int level, int pos, int a, int b) {
  int from = pos << level;
  int to = (pos + 1) << level;
  if (b <= from || to <= a) return State();
  if (a <= from && to <= b) return RMQ[I[level] + pos];
  int mid = (to + from) >> 1;
  State left = find(level - 1, pos + pos, a, b);
  State right = find(level - 1, pos + pos + 1, a, b);
  return State(
      left.cnt + right.cnt,
      left.left + right.left + right.cnt * (Z[mid] - Z[from]),
      right.right + left.right + left.cnt * (Z[to] - Z[mid]),
      left.res + right.res + left.right * right.cnt + right.left * left.cnt);
}
int main() {
  int n;
  scanf("%d", &n);
  int i;
  for (i = (0); i < (n); ++i) scanf("%d", &A[i]);
  int m;
  scanf("%d", &m);
  for (i = (0); i < (m); ++i) scanf("%d%d%d", &T[i], &L[i], &R[i]);
  vector<long long> x;
  for (i = (0); i < (n); ++i) {
    X[i] = A[i];
    x.push_back(X[i]);
  }
  for (i = (0); i < (m); ++i)
    if (T[i] == 1) {
      int a = L[i] - 1;
      X[a] += R[i];
      x.push_back(X[a]);
    }
  sort((x).begin(), (x).end());
  x.resize(unique((x).begin(), (x).end()) - x.begin());
  int cnt = int((x).size());
  for (i = (0); i < (cnt); ++i) Z[i] = x[i];
  Z[cnt] = Z[cnt - 1];
  I[0] = 0;
  for (i = (0); i < (18); ++i) I[i + 1] = I[i] + (1 << (18 - i));
  for (i = (0); i < (n); ++i) {
    X[i] = A[i];
    int a = lower_bound((x).begin(), (x).end(), X[i]) - x.begin();
    update(18, 0, a, 1);
  }
  for (i = (0); i < (m); ++i)
    if (T[i] == 1) {
      int a = L[i] - 1;
      int b = lower_bound((x).begin(), (x).end(), X[a]) - x.begin();
      update(18, 0, b, 0);
      X[a] += R[i];
      b = lower_bound((x).begin(), (x).end(), X[a]) - x.begin();
      update(18, 0, b, 1);
    } else {
      int a = lower_bound((x).begin(), (x).end(), L[i]) - x.begin();
      int b = lower_bound((x).begin(), (x).end(), R[i] + 1) - x.begin();
      printf("%lld\n", find(18, 0, a, b).res);
    }
  return 0;
};
