rt,code(Failed on a hidden test case):
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
ll Read() {
int sig = 1;
ll num = 0;
char c = getchar();
while(!isdigit(c)) {
if(c == '-') {
sig = -1;
}
c = getchar();
}
while(isdigit(c)) {
num = (num << 3) + (num << 1) + (c ^ 48);
c = getchar();
}
return num * sig;
}
void Write(ull x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x >= 10) {
Write(x / 10);
}
putchar((x % 10) ^ 48);
}
const int N = 100005, sqN = 325;
int n;
ll a[N];
struct Block {
int bsiz, bcnt, bl[sqN], br[sqN], bid[N];
ll sumib[N], sumob[sqN];
void Build(int n) {
bsiz = int(sqrt(n)), bcnt = (n + bsiz - 1) / bsiz;
int i, j;
for(i = 1; i <= bcnt; i++) {
bl[i] = br[i - 1] + 1, br[i] = min(n, bl[i] + bsiz - 1);
for(j = bl[i]; j <= br[i]; j++) {
bid[j] = i;
}
}
for(i = 1; i <= n; i++) {
sumib[i] = a[i], sumob[bid[i]] += a[i];
}
for(i = 1; i <= bcnt; i++) {
for(j = bl[i] + 1; j <= br[i]; j++) {
sumib[j] += sumib[j - 1];
}
sumob[i] += sumob[i - 1];
}
}
ll Query(int l, int r) {
int lblock = bid[l], rblock = bid[r];
if(lblock == rblock) {
return sumib[r] - (l > bl[lblock] ? sumib[l - 1] : 0ll);
}
return sumib[br[lblock]] - (l > bl[lblock] ? sumib[l - 1] : 0ll) + sumib[r] + sumob[rblock - 1] - sumob[lblock];
}
ll Add(int x, ll d) {
int block = bid[x], i;
for(i = x; i <= br[block]; i++) {
sumib[i] += d;
}
for(i = block; i <= bcnt; i++) {
sumob[i] += d;
}
return d;
}
}b2;
struct Func {
int l, r;
}f[N];
struct Block_Func {
int bsiz, bcnt, bl[sqN], br[sqN], bid[N], cnt[sqN][N];
ull sum[sqN];
void Build(int n) {
bsiz = int(sqrt(n)), bcnt = (n + bsiz - 1) / bsiz;
int i, j;
for(i = 1; i <= bcnt; i++) {
bl[i] = br[i - 1] + 1, br[i] = min(n, bl[i] + bsiz - 1);
for(j = bl[i]; j <= br[i]; j++) {
bid[j] = i, cnt[i][f[j].l]++, cnt[i][f[j].r + 1]--;
sum[i] += b2.Query(f[j].l, f[j].r);
}
}
for(i = 1; i <= bcnt; i++) {
for(j = 1; j <= n; j++) {
cnt[i][j] += cnt[i][j - 1];
}
}
}
void Add(int x, ll d) {
ll dd = b2.Add(x, d);
int i;
for(i = 1; i <= bcnt; i++) {
sum[i] += dd * cnt[i][x];
}
}
ull Query(int l, int r) {
int lblock = bid[l], rblock = bid[r], i;
ull res = 0;
if(lblock == rblock) {
for(i = l; i <= r; i++) {
res += b2.Query(f[i].l, f[i].r);
}
return res;
}
for(i = l; i <= br[lblock]; i++) {
res += b2.Query(f[i].l, f[i].r);
}
for(i = bl[rblock]; i <= r; i++) {
res += b2.Query(f[i].l, f[i].r);
}
for(i = lblock + 1; i < rblock; i++) {
res += sum[i];
}
return res;
}
}b;
int main() {
int i, m;
n = Read();
for(i = 1; i <= n; i++) {
a[i] = Read();
}
b2.Build(n);
for(i = 1; i <= n; i++) {
f[i].l = Read(), f[i].r = Read();
// Write(b2.Query(f[i].l, f[i].r)), putchar('\n');
}
b.Build(n);
m = Read();
while(m--) {
int op = Read();
if(op == 1) {
int x = Read();
ll d = Read();
b.Add(x, d);
}
else {
int l = Read(), r = Read();
Write(b.Query(l, r)), putchar('\n');
}
}
}