func_code_string: #include <bits/stdc++.h>   using namespace std;   char ch, B[1 << 20], *S = B, *T = B;   long long aa, bb;   long long rd() {     while (ch = (S == T && (T = (S = B) + fread(B, 1, 1 << 20, stdin), S == T)                      ? 0                      : *S++),            !(ch >=  0  && ch <=  9 ) && ch !=  - )       ;     ch ==  -  ? aa = bb = 0 : (aa = ch -  0 , bb = 1);     while (ch = (S == T && (T = (S = B) + fread(B, 1, 1 << 20, stdin), S == T)                      ? 0                      : *S++),            (ch >=  0  && ch <=  9 ))       aa = aa * 10 + ch -  0 ;     return bb ? aa : -aa;   }   const long long MAXN = 1e5 + 10;   long long n, k, ans, b[MAXN], tr[MAXN];   struct Node {     long long pos, l, r, q, len;   } a[MAXN];   bool cmp1(Node a, Node b) { return a.len > b.len; }   bool cmp2(Node a, Node b) { return a.q < b.q; }   inline void add(long long x, long long c) {     while (x <= n) {       tr[x] += c;       x += (x & (-x));     }   }   long long sum(long long x) {     long long ret = 0;     while (x) {       ret += tr[x];       x -= (x & (-x));     }     return ret;   }   long long query(long long l, long long r) { return sum(r) - sum(l - 1); }   inline void cdq(long long l, long long r) {     if (l == r) return;     long long mid = (l + r) >> 1;     cdq(l, mid);     cdq(mid + 1, r);     long long L = l, R = l - 1;     for (register long long i = mid + 1; i <= r; ++i) {       while (L <= mid && a[i].q - a[L].q > k) {         add(a[L].pos, -1);         ++L;       }       while (R < mid && a[R + 1].q - a[i].q <= k) {         ++R;         add(a[R].pos, 1);       }       ans += query(a[i].l, a[i].r);     }     for (register long long i = L; i <= R; ++i) add(a[i].pos, -1);     sort(a + l, a + r + 1, cmp2);   }   inline void work() {     n = rd();     k = rd();     for (register long long i = 1; i <= n; ++i) {       a[i].pos = rd();       a[i].len = rd();       a[i].q = rd();       b[i] = a[i].pos;     }     sort(b + 1, b + n + 1);     long long cnt = unique(b + 1, b + n + 1) - b - 1;     for (register long long i = 1; i <= n; ++i) {       a[i].l = lower_bound(b + 1, b + cnt + 1, a[i].pos - a[i].len) - b;       a[i].r = upper_bound(b + 1, b + cnt + 1, a[i].pos + a[i].len) - b - 1;       a[i].pos = lower_bound(b + 1, b + cnt + 1, a[i].pos) - b;     }     sort(a + 1, a + n + 1, cmp1);     cdq(1, n);     printf( %lld n , ans);   }   signed main() {     work();     return 0;   }   