func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e5 + 10, MSQ = 1010, SQ = 10, inf = 2e9;   pair<pair<int, int>, int> p[maxn];   map<int, vector<int> > mp;   vector<int> vec, vec2;   int n, k, sm[maxn], l[maxn], r[maxn];   long long ans;   void add(int ind, int val) {     while (ind < maxn) {       sm[ind] += val;       ind += (ind & -ind);     }   }   int ask(int ind) {     int ans = 0;     while (ind > 0) {       ans += sm[ind];       ind -= (ind & -ind);     }     return ans;   }   void Add(int id, int val) {     if (val == 1) ans += ask(r[id]) - ask(l[id]);     add(id + 1, val);   }   bool CMP(int a, int b) { return p[a].first.second > p[b].first.second; }   void Add(vector<int>& vec) {     sort(vec.begin(), vec.end(), CMP);     for (int id : vec) Add(id, 1);     for (int id : vec) Add(id, -1);   }   int main() {     scanf( %d%d , &n, &k);     for (int i = 0; i < n; i++) {       scanf( %d%d%d , &p[i].first.first, &p[i].first.second, &p[i].second);       vec.push_back(p[i].second);     }     sort(p, p + n);     for (int i = 0; i < n; i++) {       pair<pair<int, int>, int> PP1 = {{p[i].first.first - p[i].first.second, -1},                                        -1},                                 PP2 = {                                     {p[i].first.first + p[i].first.second, inf},                                     inf};       l[i] = lower_bound(p, p + n, PP1) - p;       r[i] = upper_bound(p, p + n, PP2) - p;     }     for (int i = 0; i < n; i++) {       mp[p[i].second].push_back(i);     }     sort(vec.begin(), vec.end());     vec.resize(unique(vec.begin(), vec.end()) - vec.begin());     for (int i = 0; i < int((vec).size()); i++) {       long long bf = ans;       Add(mp[vec[i]]);       vec2.push_back(ans - bf);     }     for (int i = 0; i < int((vec).size()); i++) {       for (int j = i + 1; j < int((vec).size()) && vec[j] - vec[i] <= k; j++) {         vector<int> vv(int((mp[vec[i]]).size()) + int((mp[vec[j]]).size())),             v1 = mp[vec[i]], v2 = mp[vec[j]];         merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vv.begin());         Add(vv);         ans -= vec2[i] + vec2[j];       }     }     printf( %lld n , ans);   }   