#include <bits/stdc++.h>
using namespace std;
string to_string(string s) { return '"' + s + '"'; }
string to_string(const char* s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto& x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
int q, s, cnt;
char c;
vector<multiset<int>> a(32);
vector<long long> pref(32);
int main() {
  scanf("%d", &q);
  while (q--) {
    scanf("%s%d", &c, &s);
    int bit = 31 - __builtin_clz(s);
    cnt += 2 * (c == '+') - 1;
    if (c == '+')
      a[bit].insert(s);
    else
      a[bit].erase(a[bit].find(s));
    for (int i = bit; i < 32; i++) {
      pref[i] += (c == '+' ? s : -s);
    }
    int cur = 0;
    for (int i = 1; i < 32; i++) {
      if (a[i].size() && pref[i - 1] && *a[i].begin() > 2 * pref[i - 1]) cur++;
    }
    if (cnt == 0 || cnt == 1)
      printf("0\n");
    else
      printf("%d\n", cnt - cur - 1);
  }
  return 0;
}
