#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
set<int> in[2];
set<int> s[2];
long long sum[2] = {0};
void update(int bit, int x) {
  sum[bit] += x;
  if (x < 0) {
    s[bit].erase(-x);
  } else {
    s[bit].insert(x);
  }
}
long long getDouble() {
  long long ret = sum[1];
  assert(in[1].size() == s[1].size());
  if (in[1].size() > 0) {
    if (s[1].count(*in[1].begin())) {
      ret -= *in[1].begin();
      if (in[0].size() > 0) {
        ret += *prev(in[0].end());
      }
    }
    return ret;
  } else {
    return ret;
  }
}
void solve() {
  int n;
  scanf("%d ", &n);
  long long allSum = 0;
  for (int i = 0; i < n; ++i) {
    int tp, d;
    scanf("%d %d ", &tp, &d);
    if (d < 0) {
      in[tp].erase(-d);
      if (s[0].count(-d)) {
        update(0, d);
      }
      if (s[1].count(-d)) {
        update(1, d);
      }
    } else {
      in[tp].insert(d);
      s[0].insert(d);
    }
    allSum += d;
    while (s[1].size() < in[1].size()) {
      assert(s[0].size() > 0);
      int x = *prev(s[0].end());
      sum[1] += x;
      s[1].insert(*prev(s[0].end()));
      s[0].erase(prev(s[0].end()));
    }
    while (s[1].size() > in[1].size()) {
      s[0].insert(*s[1].begin());
      sum[1] -= *s[1].begin();
      s[1].erase(s[1].begin());
    }
    while (s[0].size() > 0 && s[1].size() > 0) {
      if (*prev(s[0].end()) > *s[1].begin()) {
        int x = *prev(s[0].end());
        int y = *s[1].begin();
        sum[1] -= y;
        sum[1] += x;
        s[1].erase(y);
        s[0].erase(x);
        s[1].insert(x);
        s[0].insert(y);
      } else {
        break;
      }
    }
    printf("%lld\n", allSum + getDouble());
  }
}
int main() {
  solve();
  return 0;
}
