#include #include #include #include #include #include #include #ifdef _WIN32 #define llsb "%I64d" #else #define llsb "%lld" #endif using namespace std; typedef long long LL; const int maxn=100100,MAXE=200200; inline void minrep(int &a,int b){if(brev^=1; ch[1]->rev^=1; } } void init(int id1,int siz1=1){ id=id1; csiz=asiz=siz1;ssiz=rev=0; ch[0]=ch[1]=fa=p=nil; } void mt(){ if(this==nil)return; csiz=1+ch[0]->csiz+ch[1]->csiz; asiz=1+ch[0]->asiz+ch[1]->asiz+ssiz; } void sch(node *a,int x){ if(this!=nil)ch[x]=a; if(a!=nil)a->fa=this; } void rot(int x){ node *b=ch[x];fa->sch(b,fa->ch[1]==this); swap(p,b->p); sch(b->ch[!x],x); b->sch(this,!x); mt();b->mt(); } void check(){ int qt=0;q[++qt]=this; while(q[qt]->fa!=nil)q[qt+1]=q[qt]->fa,++qt; for(;qt;--qt)q[qt]->pdown(); } node *splay(){ check(); while(fa!=nil){ node *f=fa;int fp=f->ch[1]==this; if(f->fa==nil){f->rot(fp);break;} node *g=f->fa;int gp=g->ch[1]==f; if(fp==gp)g->rot(gp),f->rot(fp); else f->rot(fp),g->rot(gp); }pdown();return this; } void addDashed(node *a){//splay required && maintain afterward required if(a==nil)return; a->p=this; ssiz+=a->asiz; } void rmDashed(node *a){ if(a==nil)return; a->p=nil; ssiz-=a->asiz; } void switchPrefer(node *a){ splay(); node *b=ch[1];b->fa=nil; addDashed(b); rmDashed(a); sch(a,1); mt(); } void access(){ switchPrefer(nil); node *a=this; for(node *pa=a->p;pa!=nil;a=pa,pa=a->p)pa->switchPrefer(a); splay(); } void evert(){access();rev^=1;pdown();} //int rootid(){access();node *p=this;while(p->ch[0]!=nil)p=p->ch[0];return p->id;} }; void cut(node *a,node *b){ a->evert();b->access(); b->ch[0]->fa=nil;b->sch(nil,0);b->mt();return; } void link(node *a,node *b){ //if(a->rootid()==b->rootid())return; a->access();b->evert(); a->addDashed(b);a->mt(); b->access(); } node v[maxn]; int subTreeSize(int x){ v[x].evert(); v[x].access(); return 1+v[x].ssiz; } bool stat[maxn]; int fir[maxn],nxt[MAXE],to[MAXE],cnt,n; int cc[maxn],pj[maxn]; bool cmp(int x,int y){return cc[x]init(0,0); cnt=0; scanf("%d%d",&n,&D); for(int i=1;i<=n;++i){ stat[i]=0;fir[i]=0; v[i].init(i); pj[Tmp++]=i; scanf("%d",cc+i); } for(int i=1;i=Tmp)--Tpo; for(;Tpo>=0 && cc[id]-cc[pj[Tpo]]<=D;--Tpo)enableNode(pj[Tpo]); ans+=cou(id); } printf(llsb "\n",ans); } int main() { int T;scanf("%d",&T);while(T--)dit(); return 0; }