import
java.util.*;
class
GFG {
static
int
N = (
int
) 2e5 +
10
;
static
int
[] bit =
new
int
[N];
static
int
[] idx =
new
int
[N];
static
void
update(
int
idx,
int
val,
int
[] bitt) {
while
(idx < N) {
bitt[idx] += val;
idx += idx & (-idx);
}
}
static
int
sum(
int
idx,
int
[] bitt) {
int
res =
0
;
while
(idx >
0
) {
res += bitt[idx];
idx -= idx & (-idx);
}
return
res;
}
static
Vector<Integer> performQueries(Vector<Integer> A,
int
[][] B) {
A.insertElementAt(
0
,
0
);
int
n = (
int
) A.size();
for
(
int
i =
1
; i < n; ++i) {
update(i, A.elementAt(i), bit);
}
Vector<Integer> ans =
new
Vector<>();
for
(
int
[] i : B) {
int
type = i[
0
];
int
x = i[
1
], v = i[
2
];
if
(type ==
1
) {
update(n, x, bit);
A.add(x);
n++;
}
else
if
(type ==
2
) {
int
id = x + sum(x, idx);
update(id, -A.elementAt(id), bit);
A.set(id, v);
update(id, v, bit);
}
else
if
(type ==
3
) {
int
id = x + sum(x, idx);
update(id, -A.elementAt(id), bit);
update(x,
1
, idx);
A.set(id,
0
);
}
else
{
int
xx = x + sum(x, idx);
int
vv = v + sum(v, idx);
ans.add(sum(vv, bit) - sum(xx -
1
, bit));
}
}
return
ans;
}
public
static
void
main(String[] args) {
Integer[] a = {
1
,
2
,
5
,
3
,
4
};
Vector<Integer> A =
new
Vector<Integer>(Arrays.asList(a));
int
[][] B = { {
4
,
2
,
4
}, {
3
,
3
,
0
}, {
1
,
6
,
0
}, {
4
,
3
,
5
} };
Vector<Integer> ans = peformQueries(A, B);
for
(
int
i : ans)
System.out.println(i);
}
}