#include #include #include using namespace std; typedef long long LL; const int N = 100010; int n, q; set s; struct BIT { LL tr[N]; int LowBit(int x) { return x & -x; } void Add(int x, int v) { for (int i = x; i <= n; i += LowBit(i)) tr[i] += v; } LL Sum(int x) { LL ret = 0LL; for (int i = x; i; i -= LowBit(i)) ret += tr[i]; return ret; } }; BIT bit; int main() { // freopen("bus.in", "r", stdin); // freopen("bus.out", "w", stdout); scanf("%d%d", &n, &q); for (int i = 1, x; i <= n; ++i) { scanf("%d", &x); bit.Add(i, x); if (i <= n - 1) s.insert(i); } while (q--) { int op, x; scanf("%d%d", &op, &x); if (op == 1) { if (s.count(x)) s.erase(x); } else if (op == 2) { s.insert(x); } else if (op == 3) { bit.Add(x, 1); } else { if (s.empty()) { printf("%lld\n", bit.Sum(n)); } else { if (*s.rbegin() < x) { printf("%lld\n", bit.Sum(n) - bit.Sum(*s.rbegin())); } else { int bg = *s.lower_bound(x); if (bg == *s.begin()) printf("%lld\n", bit.Sum(bg)); else { int ed = *prev(s.lower_bound(x)); printf("%lld\n", bit.Sum(bg) - bit.Sum(ed)); } } } } } return 0; }