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
#include <iostream>
#include <algorithm>
using namespace std;

#define FORE(x, b, e) for(int x = b; x <= (e); ++x)
#define FORL(x, b, e) for(int x = b; x <  (e); ++x)

#define P(x) cout <<#x <<'=' <<(x) <<" ";
#define PP cout <<endl;
#define Pv(x,a,b) cout << #x<<'=';for(int i=a;i<=b;i++)cout<<' '<<x[i];PP
#define Pvv(x,y,a,b) cout <<#x <<#y <<'=';FORL(i,a,b)cout<<' '<<x[y[i]].t<<'/'<<x[y[i]].r;PP

#define MAX 500000
struct garage { int r,t; };

int main()
{
	std::ios_base::sync_with_stdio(false);  cin.tie(NULL);
	
	int n;	
	cin >>n;
	garage S[n];
	int T[n];
	
	for(int i=0; i<n; i++){
		int r,w,t;
		cin >>r >>w >>t;
		S[i]={r-1,t-w};
	}

	for(int i=0; i<n; i++) T[i]=i;
	std::sort(T, T+n, [&S](int i, int j){
		return (S[i].t) < (S[j].t);
	});

//**/Pvv(S,T,0,n);
	int ans=0, cnt[2]={0,0}, r,t, t0=S[T[0]].t;
	for(int i=0; i<n; i++){
		t=T[i];
		r=S[t].r;
		t=S[t].t;
		if(t!=t0) {
			t0=t;
			ans += min(cnt[0],cnt[1]);
			cnt[1]=cnt[0]=0;
		}
		cnt[r]++;
	}
	ans += min(cnt[0],cnt[1]);
	cout<<ans<<endl;

	return 0;
}