#include <bits/stdc++.h>
using namespace std;
const int N = 1000000;
struct in4 {
  int a, t, x, i;
};
in4 a[N];
bool mf(in4 r, in4 k) {
  if (r.t < k.t) return true;
  if (r.t > k.t) return false;
  if (r.a < k.a) return true;
  if (r.a > k.a) return false;
  return r.i < k.i;
}
map<int, int> mk;
int ans[N + 1];
set<int> cont;
int main() {
  int n, m, q;
  scanf("%d", &n);
  int cnt = 0;
  cont.insert(0);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", &a[i].a, &a[i].t, &a[i].x);
    if (a[i].a == 3) {
      set<int>::iterator pos = (cont.lower_bound(a[i].t));
      if (pos != cont.begin()) pos--;
      q = *(pos);
      if (i > 0)
        a[i].t = min(a[i].t, q);
      else
        a[i].t = 0;
      a[i].i = cnt++;
    }
    cont.insert(a[i].t);
  }
  sort(a, a + n, mf);
  int k = 0;
  for (int i = 0; i < n; i++) {
    if (a[i].a == 1) {
      mk[a[i].x]++;
    } else if (a[i].a == 2) {
      mk[a[i].x] = max(mk[a[i].x] - 1, 0);
    } else {
      ans[a[i].i] = mk[a[i].x];
    }
  }
  for (int i = 0; i < cnt; i++) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
