#include <bits/stdc++.h> using namespace std; int binsearch(pair<int, int> a, int l, int r, vector<int> &col, vector<vector<int>> &K) { while (l < r) { int mid = (l+r)/2; auto &k = col[mid]; if (make_pair(K[k][1] - K[k][2], K[k][0]) > a) { r = mid; } else l = mid+1; } return r; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector<pair<int,int>> K(n); for (auto &x : K) { int r, w, t; cin >> r >> w >> t; x = {w-t, r}; } sort(K.begin(), K.end()); int cnt = 0; for (int i = 0; i < n; ++i) { if (K[i].second == 2) continue; auto x = K[i].first; // i <= j auto j = upper_bound(K.begin(), K.end(), K[i]) - K.begin(); auto k = upper_bound(K.begin(), K.end(), make_pair(x, 2)) - K.begin(); if (j != k) { cnt += min(j-i, k-j); i = k-1; } } cout << cnt << '\n'; } // 6 // 1 1 5 // 1 3 3 // 1 5 4 // 2 1 0 // 1 5 2 // 2 4 1
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 | #include <bits/stdc++.h> using namespace std; int binsearch(pair<int, int> a, int l, int r, vector<int> &col, vector<vector<int>> &K) { while (l < r) { int mid = (l+r)/2; auto &k = col[mid]; if (make_pair(K[k][1] - K[k][2], K[k][0]) > a) { r = mid; } else l = mid+1; } return r; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector<pair<int,int>> K(n); for (auto &x : K) { int r, w, t; cin >> r >> w >> t; x = {w-t, r}; } sort(K.begin(), K.end()); int cnt = 0; for (int i = 0; i < n; ++i) { if (K[i].second == 2) continue; auto x = K[i].first; // i <= j auto j = upper_bound(K.begin(), K.end(), K[i]) - K.begin(); auto k = upper_bound(K.begin(), K.end(), make_pair(x, 2)) - K.begin(); if (j != k) { cnt += min(j-i, k-j); i = k-1; } } cout << cnt << '\n'; } // 6 // 1 1 5 // 1 3 3 // 1 5 4 // 2 1 0 // 1 5 2 // 2 4 1 |