//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define ff(i,a,b) for(auto i=(a); i<=(b); ++i)
#define ss " "
#define pb emplace_back
#define sz(v) (int)(v).size()
#define all(v) (v).begin(), (v).end()
typedef long long ll;
const int maxn1=2e5+5;
struct HS{int x,r,ts;} a[maxn1];
struct Interval{int l,x,r;} b[maxn1];
vector<int> groupIdx[maxn1]; // chỉ số theo nhóm ts
ll cntGrp[maxn1][55]; // cnt[i][d] giữa nhóm i và i+d (d<=50)
vector<int> xsComp, tsComp;
struct BIT{
int N; vector<int> t;
BIT() {}
BIT(int n){ init(n); }
void init(int n){ N=n; t.assign(N+2,0); }
void add(int i,int v){ for(; i<=N; i+=i&-i) t[i]+=v; }
int sum(int i){ int s=0; for(; i>0; i-=i&-i) s+=t[i]; return s; }
int range(int l,int r){ if(l>r) return 0; return sum(r)-sum(l-1); }
};
void compress(int n){
vector<int> v;
for(int i=1;i<=n;i++) v.pb(b[i].l), v.pb(b[i].x), v.pb(b[i].r);
sort(all(v)); v.erase(unique(all(v)), v.end());
xsComp=v;
for(int i=1;i<=n;i++){
b[i].l = upper_bound(all(v), b[i].l)-v.begin();
b[i].x = upper_bound(all(v), b[i].x)-v.begin();
b[i].r = upper_bound(all(v), b[i].r)-v.begin();
}
v.clear();
for(int i=1;i<=n;i++) v.pb(a[i].ts);
sort(all(v)); v.erase(unique(all(v)), v.end());
tsComp=v;
for(int i=1;i<=n;i++)
a[i].ts = upper_bound(all(v), a[i].ts)-v.begin();
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int sub; if(!(cin>>sub)) return 0;
int n,q; cin>>n>>q;
for(int i=1;i<=n;i++){
int x,r,ts; cin>>x>>r>>ts;
a[i]={x,r,ts};
b[i]={x-r,x,x+r};
}
compress(n);
int S = sz(tsComp);
for(int i=1;i<=n;i++) groupIdx[a[i].ts].pb(i);
// Pre-build mỗi nhóm: danh sách index sort theo l, r, x
vector<vector<int>> byL(S+1), byR(S+1), byX(S+1);
for(int g=1; g<=S; g++){
auto &vec = groupIdx[g];
byL[g]=vec; byR[g]=vec; byX[g]=vec;
sort(all(byL[g]), [&](int i,int j){ return b[i].l < b[j].l; });
sort(all(byR[g]), [&](int i,int j){ return b[i].r < b[j].r; });
sort(all(byX[g]), [&](int i,int j){ return b[i].x < b[j].x; });
}
// Fenwick theo x đã nén
const int XN = sz(xsComp)+2;
const int D = 50;
// Tính cnt[g][d] cho mọi d ≤ 50 bằng quét hợp hai nhóm
for(int d=0; d<=D; d++){
for(int g=1; g<=S; g++){
int h = g + d;
if(h>S) break;
if(groupIdx[g].empty() || groupIdx[h].empty()){
cntGrp[g][d]=0; continue;
}
// merged theo x
vector<pair<int,int>> merged; // (x, +id) id>0 thuộc h; id<0 thuộc g
merged.reserve(groupIdx[g].size()+groupIdx[h].size());
for(int i: byX[g]) merged.pb(b[i].x, -i);
for(int j: byX[h]) merged.pb(b[j].x, +j);
sort(all(merged));
// Active set cho mỗi nhóm bằng 2 BIT theo x_i
BIT bitA(XN), bitB(XN);
int pLg=0, pRg=0, pLh=0, pRh=0;
const auto &GL=byL[g], &GR=byR[g];
const auto &HL=byL[h], &HR=byR[h];
long long pairs=0;
for(auto [xcur, tag] : merged){
// cập nhật active theo xcur cho cả 2 nhóm
while(pLg<sz(GL) && b[GL[pLg]].l<=xcur){
bitA.add(b[GL[pLg]].x, +1); pLg++;
}
while(pRg<sz(GR) && b[GR[pRg]].r < xcur){
bitA.add(b[GR[pRg]].x, -1); pRg++;
}
while(pLh<sz(HL) && b[HL[pLh]].l<=xcur){
bitB.add(b[HL[pLh]].x, +1); pLh++;
}
while(pRh<sz(HR) && b[HR[pRh]].r < xcur){
bitB.add(b[HR[pRh]].x, -1); pRh++;
}
if(tag>0){ // phần tử thuộc nhóm h, ghép với active của g
int j = tag;
int lj = b[j].l;
pairs += bitA.range(lj, b[j].x);
}else{ // thuộc nhóm g, ghép với active của h
int i = -tag;
int li = b[i].l;
if(g==h){
// cùng nhóm: đang active của chính nhóm -> trừ bản thân
pairs += bitB.range(li, b[i].x) - 1;
}else{
pairs += bitB.range(li, b[i].x);
}
}
}
cntGrp[g][d]=pairs;
}
}
// Trả lời truy vấn
while(q--){
int Lval, Rval; cin>>Lval>>Rval;
// map sang chỉ số nén của ts
int L=-1, R=-1;
// lower_bound ≥ Lval
int l=1,r=sz(tsComp);
while(l<=r){ int m=(l+r)>>1; if(tsComp[m-1]>=Lval){ L=m; r=m-1;} else l=m+1; }
if(L==-1){ cout<<0<<ss; continue; }
// upper_bound ≤ Rval
l=1; r=sz(tsComp);
while(l<=r){ int m=(l+r)>>1; if(tsComp[m-1]<=Rval){ R=m; l=m+1;} else r=m-1; }
if(R==-1){ cout<<0<<ss; continue; }
long long ans=0;
for(int i=L;i<=R;i++){
int rem = min(50, R - i);
for(int dlt=0; dlt<=rem; ++dlt) ans += cntGrp[i][dlt];
}
cout<<ans<<ss;
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmYoaSxhLGIpIGZvcihhdXRvIGk9KGEpOyBpPD0oYik7ICsraSkKI2RlZmluZSBzcyAiICIKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBzeih2KSAoaW50KSh2KS5zaXplKCkKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IG1heG4xPTJlNSs1OwoKc3RydWN0IEhTe2ludCB4LHIsdHM7fSBhW21heG4xXTsKc3RydWN0IEludGVydmFse2ludCBsLHgscjt9IGJbbWF4bjFdOwoKdmVjdG9yPGludD4gZ3JvdXBJZHhbbWF4bjFdOyAgICAgLy8gY2jhu4kgc+G7kSB0aGVvIG5ow7NtIHRzCmxsIGNudEdycFttYXhuMV1bNTVdOyAgICAgICAgICAgIC8vIGNudFtpXVtkXSBnaeG7r2EgbmjDs20gaSB2w6AgaStkIChkPD01MCkKdmVjdG9yPGludD4geHNDb21wLCB0c0NvbXA7CgpzdHJ1Y3QgQklUewogICAgaW50IE47IHZlY3RvcjxpbnQ+IHQ7CiAgICBCSVQoKSB7fQogICAgQklUKGludCBuKXsgaW5pdChuKTsgfQogICAgdm9pZCBpbml0KGludCBuKXsgTj1uOyB0LmFzc2lnbihOKzIsMCk7IH0KICAgIHZvaWQgYWRkKGludCBpLGludCB2KXsgZm9yKDsgaTw9TjsgaSs9aSYtaSkgdFtpXSs9djsgfQogICAgaW50IHN1bShpbnQgaSl7IGludCBzPTA7IGZvcig7IGk+MDsgaS09aSYtaSkgcys9dFtpXTsgcmV0dXJuIHM7IH0KICAgIGludCByYW5nZShpbnQgbCxpbnQgcil7IGlmKGw+cikgcmV0dXJuIDA7IHJldHVybiBzdW0ociktc3VtKGwtMSk7IH0KfTsKCnZvaWQgY29tcHJlc3MoaW50IG4pewogICAgdmVjdG9yPGludD4gdjsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSB2LnBiKGJbaV0ubCksIHYucGIoYltpXS54KSwgdi5wYihiW2ldLnIpOwogICAgc29ydChhbGwodikpOyB2LmVyYXNlKHVuaXF1ZShhbGwodikpLCB2LmVuZCgpKTsKICAgIHhzQ29tcD12OwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGJbaV0ubCA9IHVwcGVyX2JvdW5kKGFsbCh2KSwgYltpXS5sKS12LmJlZ2luKCk7CiAgICAgICAgYltpXS54ID0gdXBwZXJfYm91bmQoYWxsKHYpLCBiW2ldLngpLXYuYmVnaW4oKTsKICAgICAgICBiW2ldLnIgPSB1cHBlcl9ib3VuZChhbGwodiksIGJbaV0uciktdi5iZWdpbigpOwogICAgfQogICAgdi5jbGVhcigpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIHYucGIoYVtpXS50cyk7CiAgICBzb3J0KGFsbCh2KSk7IHYuZXJhc2UodW5pcXVlKGFsbCh2KSksIHYuZW5kKCkpOwogICAgdHNDb21wPXY7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgICAgICBhW2ldLnRzID0gdXBwZXJfYm91bmQoYWxsKHYpLCBhW2ldLnRzKS12LmJlZ2luKCk7Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBzdWI7IGlmKCEoY2luPj5zdWIpKSByZXR1cm4gMDsKICAgIGludCBuLHE7IGNpbj4+bj4+cTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBpbnQgeCxyLHRzOyBjaW4+Png+PnI+PnRzOwogICAgICAgIGFbaV09e3gscix0c307CiAgICAgICAgYltpXT17eC1yLHgseCtyfTsKICAgIH0KICAgIGNvbXByZXNzKG4pOwoKICAgIGludCBTID0gc3oodHNDb21wKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBncm91cElkeFthW2ldLnRzXS5wYihpKTsKCiAgICAvLyBQcmUtYnVpbGQgbeG7l2kgbmjDs206IGRhbmggc8OhY2ggaW5kZXggc29ydCB0aGVvIGwsIHIsIHgKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYnlMKFMrMSksIGJ5UihTKzEpLCBieVgoUysxKTsKICAgIGZvcihpbnQgZz0xOyBnPD1TOyBnKyspewogICAgICAgIGF1dG8gJnZlYyA9IGdyb3VwSWR4W2ddOwogICAgICAgIGJ5TFtnXT12ZWM7IGJ5UltnXT12ZWM7IGJ5WFtnXT12ZWM7CiAgICAgICAgc29ydChhbGwoYnlMW2ddKSwgWyZdKGludCBpLGludCBqKXsgcmV0dXJuIGJbaV0ubCA8IGJbal0ubDsgfSk7CiAgICAgICAgc29ydChhbGwoYnlSW2ddKSwgWyZdKGludCBpLGludCBqKXsgcmV0dXJuIGJbaV0uciA8IGJbal0ucjsgfSk7CiAgICAgICAgc29ydChhbGwoYnlYW2ddKSwgWyZdKGludCBpLGludCBqKXsgcmV0dXJuIGJbaV0ueCA8IGJbal0ueDsgfSk7CiAgICB9CgogICAgLy8gRmVud2ljayB0aGVvIHggxJHDoyBuw6luCiAgICBjb25zdCBpbnQgWE4gPSBzeih4c0NvbXApKzI7CiAgICBjb25zdCBpbnQgRCA9IDUwOwoKICAgIC8vIFTDrW5oIGNudFtnXVtkXSBjaG8gbeG7jWkgZCDiiaQgNTAgYuG6sW5nIHF1w6l0IGjhu6NwIGhhaSBuaMOzbQogICAgZm9yKGludCBkPTA7IGQ8PUQ7IGQrKyl7CiAgICAgICAgZm9yKGludCBnPTE7IGc8PVM7IGcrKyl7CiAgICAgICAgICAgIGludCBoID0gZyArIGQ7CiAgICAgICAgICAgIGlmKGg+UykgYnJlYWs7CiAgICAgICAgICAgIGlmKGdyb3VwSWR4W2ddLmVtcHR5KCkgfHwgZ3JvdXBJZHhbaF0uZW1wdHkoKSl7CiAgICAgICAgICAgICAgICBjbnRHcnBbZ11bZF09MDsgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIG1lcmdlZCB0aGVvIHgKICAgICAgICAgICAgdmVjdG9yPHBhaXI8aW50LGludD4+IG1lcmdlZDsgLy8gKHgsICtpZCkgaWQ+MCB0aHXhu5ljIGg7IGlkPDAgdGh14buZYyBnCiAgICAgICAgICAgIG1lcmdlZC5yZXNlcnZlKGdyb3VwSWR4W2ddLnNpemUoKStncm91cElkeFtoXS5zaXplKCkpOwogICAgICAgICAgICBmb3IoaW50IGk6IGJ5WFtnXSkgbWVyZ2VkLnBiKGJbaV0ueCwgLWkpOwogICAgICAgICAgICBmb3IoaW50IGo6IGJ5WFtoXSkgbWVyZ2VkLnBiKGJbal0ueCwgK2opOwogICAgICAgICAgICBzb3J0KGFsbChtZXJnZWQpKTsKCiAgICAgICAgICAgIC8vIEFjdGl2ZSBzZXQgY2hvIG3hu5dpIG5ow7NtIGLhurFuZyAyIEJJVCB0aGVvIHhfaQogICAgICAgICAgICBCSVQgYml0QShYTiksIGJpdEIoWE4pOwogICAgICAgICAgICBpbnQgcExnPTAsIHBSZz0wLCBwTGg9MCwgcFJoPTA7CiAgICAgICAgICAgIGNvbnN0IGF1dG8gJkdMPWJ5TFtnXSwgJkdSPWJ5UltnXTsKICAgICAgICAgICAgY29uc3QgYXV0byAmSEw9YnlMW2hdLCAmSFI9YnlSW2hdOwoKICAgICAgICAgICAgbG9uZyBsb25nIHBhaXJzPTA7CgogICAgICAgICAgICBmb3IoYXV0byBbeGN1ciwgdGFnXSA6IG1lcmdlZCl7CiAgICAgICAgICAgICAgICAvLyBj4bqtcCBuaOG6rXQgYWN0aXZlIHRoZW8geGN1ciBjaG8gY+G6oyAyIG5ow7NtCiAgICAgICAgICAgICAgICB3aGlsZShwTGc8c3ooR0wpICYmIGJbR0xbcExnXV0ubDw9eGN1cil7CiAgICAgICAgICAgICAgICAgICAgYml0QS5hZGQoYltHTFtwTGddXS54LCArMSk7IHBMZysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUocFJnPHN6KEdSKSAmJiBiW0dSW3BSZ11dLnIgPCB4Y3VyKXsKICAgICAgICAgICAgICAgICAgICBiaXRBLmFkZChiW0dSW3BSZ11dLngsIC0xKTsgcFJnKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZShwTGg8c3ooSEwpICYmIGJbSExbcExoXV0ubDw9eGN1cil7CiAgICAgICAgICAgICAgICAgICAgYml0Qi5hZGQoYltITFtwTGhdXS54LCArMSk7IHBMaCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUocFJoPHN6KEhSKSAmJiBiW0hSW3BSaF1dLnIgPCB4Y3VyKXsKICAgICAgICAgICAgICAgICAgICBiaXRCLmFkZChiW0hSW3BSaF1dLngsIC0xKTsgcFJoKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYodGFnPjApeyAvLyBwaOG6p24gdOG7rSB0aHXhu5ljIG5ow7NtIGgsIGdow6lwIHbhu5tpIGFjdGl2ZSBj4bunYSBnCiAgICAgICAgICAgICAgICAgICAgaW50IGogPSB0YWc7CiAgICAgICAgICAgICAgICAgICAgaW50IGxqID0gYltqXS5sOwogICAgICAgICAgICAgICAgICAgIHBhaXJzICs9IGJpdEEucmFuZ2UobGosIGJbal0ueCk7CiAgICAgICAgICAgICAgICB9ZWxzZXsgICAgIC8vIHRodeG7mWMgbmjDs20gZywgZ2jDqXAgduG7m2kgYWN0aXZlIGPhu6dhIGgKICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IC10YWc7CiAgICAgICAgICAgICAgICAgICAgaW50IGxpID0gYltpXS5sOwogICAgICAgICAgICAgICAgICAgIGlmKGc9PWgpewogICAgICAgICAgICAgICAgICAgICAgICAvLyBjw7luZyBuaMOzbTogxJFhbmcgYWN0aXZlIGPhu6dhIGNow61uaCBuaMOzbSAtPiB0cuG7qyBi4bqjbiB0aMOibgogICAgICAgICAgICAgICAgICAgICAgICBwYWlycyArPSBiaXRCLnJhbmdlKGxpLCBiW2ldLngpIC0gMTsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMgKz0gYml0Qi5yYW5nZShsaSwgYltpXS54KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY250R3JwW2ddW2RdPXBhaXJzOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBUcuG6oyBs4budaSB0cnV5IHbhuqVuCiAgICB3aGlsZShxLS0pewogICAgICAgIGludCBMdmFsLCBSdmFsOyBjaW4+Pkx2YWw+PlJ2YWw7CiAgICAgICAgLy8gbWFwIHNhbmcgY2jhu4kgc+G7kSBuw6luIGPhu6dhIHRzCiAgICAgICAgaW50IEw9LTEsIFI9LTE7CiAgICAgICAgLy8gbG93ZXJfYm91bmQg4omlIEx2YWwKICAgICAgICBpbnQgbD0xLHI9c3oodHNDb21wKTsKICAgICAgICB3aGlsZShsPD1yKXsgaW50IG09KGwrcik+PjE7IGlmKHRzQ29tcFttLTFdPj1MdmFsKXsgTD1tOyByPW0tMTt9IGVsc2UgbD1tKzE7IH0KICAgICAgICBpZihMPT0tMSl7IGNvdXQ8PDA8PHNzOyBjb250aW51ZTsgfQogICAgICAgIC8vIHVwcGVyX2JvdW5kIOKJpCBSdmFsCiAgICAgICAgbD0xOyByPXN6KHRzQ29tcCk7CiAgICAgICAgd2hpbGUobDw9cil7IGludCBtPShsK3IpPj4xOyBpZih0c0NvbXBbbS0xXTw9UnZhbCl7IFI9bTsgbD1tKzE7fSBlbHNlIHI9bS0xOyB9CiAgICAgICAgaWYoUj09LTEpeyBjb3V0PDwwPDxzczsgY29udGludWU7IH0KCiAgICAgICAgbG9uZyBsb25nIGFucz0wOwogICAgICAgIGZvcihpbnQgaT1MO2k8PVI7aSsrKXsKICAgICAgICAgICAgaW50IHJlbSA9IG1pbig1MCwgUiAtIGkpOwogICAgICAgICAgICBmb3IoaW50IGRsdD0wOyBkbHQ8PXJlbTsgKytkbHQpIGFucyArPSBjbnRHcnBbaV1bZGx0XTsKICAgICAgICB9CiAgICAgICAgY291dDw8YW5zPDxzczsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==