#include <bits/stdc++.h>
using namespace std;
long long sum[4100099], mx[4100099], ans;
int q, t, d, a[4100099][2], x;
void up(int i) {
  sum[i] = sum[i * 2] + sum[i * 2 + 1];
  mx[i] = max(mx[i * 2 + 1], mx[i * 2] + sum[i * 2 + 1]);
}
void build(int l, int r, int i) {
  if (l == r) {
    sum[i] = 0, mx[i] = l;
    return;
  }
  build(l, (l + r) / 2, i * 2), build((l + r) / 2 + 1, r, i * 2 + 1);
  up(i);
}
void update(int pos, int d, int l, int r, int i) {
  if (l == r) {
    sum[i] += d;
    mx[i] += d;
    return;
  }
  if (pos <= (l + r) / 2)
    update(pos, d, l, (l + r) / 2, i * 2);
  else
    update(pos, d, (l + r) / 2 + 1, r, i * 2 + 1);
  up(i);
}
void query(int R, int l, int r, int i) {
  if (r <= R) {
    ans = max(mx[i], ans + sum[i]);
    return;
  }
  query(R, l, (l + r) / 2, i * 2);
  if (R > (l + r) / 2) query(R, (l + r) / 2 + 1, r, i * 2 + 1);
}
int main() {
  build(1, 1000001, 1);
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    char s[10];
    scanf("%s", s);
    if (s[0] == '+') {
      scanf("%d%d", &a[i][0], &a[i][1]);
      update(a[i][0], a[i][1], 1, 1000001, 1);
    }
    if (s[0] == '-') {
      scanf("%d", &x);
      update(a[x][0], -a[x][1], 1, 1000001, 1);
    }
    if (s[0] == '?') {
      scanf("%d", &x);
      ans = 0;
      query(x, 1, 1000001, 1);
      printf("%lld\n", max(ans - x, 0ll));
    }
  }
  return 0;
}
