1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int size(vector<int> &A, int q){
	int n = A.size(),y;
                      int b=0,e=n-1;
                      while (e>b)
                      {
                              int x = (e+b)/2;
                              if (A[x] < q) b = x+1;
                              else e = x;
                      }
                      if (A[e] != q) return 0;
                      else
                      {
 
                              int c=0,f=n-1;
                              while (f>c)
                              {
                                      int x = (c+f+1)/2;
                                      if (A[x] > q) f = x-1;
                                      else c = x;
                              }
                              return f-e+1;
                      }
}
int main(){
	cin.tie(0);cout.tie(0);
	ios_base::sync_with_stdio(false);
	int n;
	cin >> n;
	vector <int> A, B;
	while(n--){
		int a, b, c;
		cin >> a >> b >> c;
		if(a==1)A.push_back(b-c);
		if(a==2)B.push_back(b-c);
	}
	sort(A.begin(),A.end());
	sort(B.begin(),B.end());
	if(A.size()==0 || B.size() ==0){
		cout << 0 << '\n';
		return 0;
	}
	int counter = 0;
	int i=0,j=0;
	while(i<A.size()){
		int a = size(A,A[i]);
		while(B[j]<A[i] && j < B.size()){
			j++;
		}
		if(A[i]==B[j]){
			int b= size(B,A[i]);
			counter += min(a,b);
			j+=b;
		}
		i+=a;
	}
	cout << counter << '\n';
}