func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T, typename U>   inline void smin(T &a, const U &b) {     if (a > b) a = b;   }   template <typename T, typename U>   inline void smax(T &a, const U &b) {     if (a < b) a = b;   }   template <class T>   inline void gn(T &first) {     char c, sg = 0;     while (c = getchar(), (c >  9  || c <  0 ) && c !=  - )       ;     for ((c ==  -  ? sg = 1, c = getchar() : 0), first = 0; c >=  0  && c <=  9 ;          c = getchar())       first = (first << 1) + (first << 3) + c -  0 ;     if (sg) first = -first;   }   template <class T1, class T2>   inline void gn(T1 &x1, T2 &x2) {     gn(x1), gn(x2);   }   template <class T1, class T2, class T3>   inline void gn(T1 &x1, T2 &x2, T3 &x3) {     gn(x1, x2), gn(x3);   }   template <class T>   inline void print(T first) {     if (first < 0) {       putchar( - );       return print(-first);     }     if (first < 10) {       putchar( 0  + first);       return;     }     print(first / 10);     putchar(first % 10 +  0 );   }   template <class T>   inline void println(T first) {     print(first);     putchar(  n );   }   template <class T>   inline void printsp(T first) {     print(first);     putchar(   );   }   template <class T1, class T2>   inline void print(T1 x1, T2 x2) {     printsp(x1), println(x2);   }   template <class T1, class T2, class T3>   inline void print(T1 x1, T2 x2, T3 x3) {     printsp(x1), printsp(x2), println(x3);   }   int power(int a, int b, int m, int ans = 1) {     for (; b; b >>= 1, a = (long long)a * a % m)       if (b & 1) ans = (long long)ans * a % m;     return ans;   }   pair<pair<int, int>, int> p[200010];   int first[200010], t[200010], nn;   vector<int> pos[200010], B[200010];   void update(int id, int u, int v) {     for (; u < B[id].size(); u += u & -u) B[id][u] += v;   }   int calc(int id, int u, int ans = 0) {     for (; u; u -= u & -u) ans += B[id][u];     return ans;   }   int main() {     int n;     gn(n);     for (int i = 0; i < n; i++) {       gn(p[i].first.first, p[i].first.second, p[i].second);       first[i] = p[i].second;       t[i] = p[i].first.second;     }     sort(t, t + n);     sort(first, first + n);     nn = unique(first, first + n) - first;     for (int i = 0; i < n; i++) {       p[i].first.second = upper_bound(t, t + n, p[i].first.second) - t;       p[i].second = lower_bound(first, first + nn, p[i].second) - first;       pos[p[i].second].push_back(p[i].first.second);     }     for (int i = 0; i < nn; i++) {       sort(pos[i].begin(), pos[i].end());       B[i].resize(pos[i].size() + 1);     }     for (int i = 0; i < n; i++) {       int a = p[i].first.first, u = p[i].second;       int t = upper_bound(pos[u].begin(), pos[u].end(), p[i].first.second) -               pos[u].begin();       if (a == 1)         update(u, t, 1);       else if (a == 2)         update(u, t, -1);       else         println(calc(u, t));     }   }   