#include<bits/stdc++.h>
using namespace std;
#define int ll
typedef long long ll;
typedef unsigned long long ull;
#define sz(x) (int)(x.size())
#define eb emplace_back
#define btpc(x) __builtin_popcount(x)
#define btpcll(x) __builtin_popcountll(x)
#define mk make_pair
#define fi first
#define se second
typedef pair<int,int> pii;
#define ReadIn(s) freopen(s,"r",stdin)
#define OutPut(s) freopen(s,"w",stdout)
inline void read(int &x) {
x=0;int sgn=0;
char ch=getchar();
while(!isdigit(ch)) sgn|=(ch=='-'),ch=getchar();
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
sgn?x=-x:1;
}
template<typename ...Args>
inline void read(int &x,Args &...args) {
read(x);read(args...);
}
const int M=3e5+10;
bool Mst;
int oo,T;
int n;
int npos[M];
int a[M],b[M],t[M];
pii O[M];
struct Node {
mutable int pos,aim,id;
Node (int pos,int aim,int id) :pos(pos),aim(aim),id(id) {;}
bool operator < (const Node &a) const {
return pos<a.pos;
}
};
set<Node>s;
int forward(int id) {
auto it=s.lower_bound(Node(npos[id],0,0));
int aim=it->aim,t=it->aim-it->pos;
it->pos=it->aim;npos[id]=it->aim;
for(auto goo=next(it);goo!=s.end();goo++) {
if(goo->pos>aim) break;
aim++;t+=aim-goo->pos;goo->pos=aim;npos[goo->id]=aim;
}
return t;
}
int down(int id) {
auto it=s.lower_bound(Node(npos[id],0,0));
int aim=it->aim,t=it->pos-it->aim;
it->pos=it->aim;npos[id]=it->aim;
if(it!=s.begin()) for(auto goo=prev(it);;goo--) {
if(goo->pos<aim) break;
aim--;t+=goo->pos-aim;goo->pos=aim;npos[goo->id]=aim;
if(goo==s.begin()) break;
}
return t;
}
void solve() {
read(n);
for(int i=1;i<=n;i++) {
read(a[i],b[i],t[i]);
s.insert(Node(a[i],b[i],i));
O[i]=mk(t[i],i);npos[i]=a[i];
}
sort(O+1,O+n+1,[] (pii a,pii b) {
return a.fi<b.fi;
});
int tim=0;
int fl=0;
for(int i=1;i<=n;i++) {
int id=O[i].se;
if(a[id]<b[id]) tim+=forward(id);
else tim+=down(id);
if(tim>O[i].fi) {
fl=1;break;
}
}
if(fl) cout<<"No\n";
else cout<<"Yes\n";
s.clear();
}
#define ls x<<1
#define rs x<<1|1
#define mid ((l+r)>>1)
struct Seg_Tree {
int ri[M<<2];
int le[M<<2];
int tag[M<<2];
int sum[M<<2];
pii li[M<<2];
inline int get_pos(int x,int l,int r,int ty) {
if(ty==-1) return li[x].fi*l+li[x].se;
return li[x].fi*r+li[x].se;
}
void pushup(int x) {
ri[x]=ri[rs];
le[x]=le[ls];
sum[x]=sum[ls]+sum[rs];
}
void build(int x,int l,int r) {
tag[x]=0;
if(l==r) return ri[x]=le[x]=sum[x]=a[l],void();
build(ls,l,mid);build(rs,mid+1,r);pushup(x);
}
void make(int x,int l,int r,pii L) {
li[x]=L;tag[x]=1;
le[x]=get_pos(x,l,r,-1);
ri[x]=get_pos(x,l,r,1);
sum[x]=(ri[x]+le[x])*(r-l+1)/2;
}
void pushdown(int x,int l,int r) {
if(tag[x]) {
make(ls,l,mid,li[x]);
make(rs,mid+1,r,li[x]);
tag[x]=0;
}
}
int fl=0,ans=-1;
int query(int l,int r,int aim) {
fl=0;ans=-1;_query(1,1,n,l,r,aim);
return ans;
}
void _query(int x,int l,int r,int L,int R,int aim) {
if(fl) return ;
if(l>R||r<L) return ;
if(L<=l&&r<=R) {
if(aim+r<=ri[x]) {
ans=__query(x,l,r,aim);
fl=1;
}
return ;
}
pushdown(x,l,r);
_query(ls,l,mid,L,R,aim);_query(rs,mid+1,r,L,R,aim);
}
int __query(int x,int l,int r,int aim) {
if(l==r) return l;
pushdown(x,l,r);
if(aim+mid>ri[ls]) return __query(rs,mid+1,r,aim);
return __query(ls,l,mid,aim);
}
void update(int x,int l,int r,int L,int R,pii Li) {
if(l>R||r<L) return ;
if(L<=l&&r<=R) return make(x,l,r,Li);
pushdown(x,l,r);
update(ls,l,mid,L,R,Li);
update(rs,mid+1,r,L,R,Li);
pushup(x);
}
int _get_pos(int x,int l,int r,int t) {
if(l==r) return l;
pushdown(x,l,r);
if(ri[ls]<t) return _get_pos(rs,mid+1,r,t);
return _get_pos(ls,l,mid,t);
}
int query_(int l,int r,int aim) {
fl=0;ans=n+1;_query_(1,1,n,l,r,aim);
return ans;
}
void _query_(int x,int l,int r,int L,int R,int aim) {
if(fl) return ;
if(l>R||r<L) return ;
if(L<=l&&r<=R) {
if(aim+l>=le[x]) {
ans=__query_(x,l,r,aim);
fl=1;
}
return ;
}
pushdown(x,l,r);
_query_(rs,mid+1,r,L,R,aim);_query_(ls,l,mid,L,R,aim);
}
int __query_(int x,int l,int r,int aim) {
if(l==r) return l;
pushdown(x,l,r);
if(aim+mid+1<le[rs]) return __query_(ls,l,mid,aim);
return __query_(rs,mid+1,r,aim);
}
int _get_pos_(int x,int l,int r,int t) {
if(l==r) return l;
pushdown(x,l,r);
if(le[rs]>t) return _get_pos_(ls,l,mid,t);
return _get_pos_(rs,mid+1,r,t);
}
int get_val(int x,int l,int r,int aim) {
if(l==r) return ri[x];
pushdown(x,l,r);
if(mid>=aim) return get_val(ls,l,mid,aim);
return get_val(rs,mid+1,r,aim);
}
int Sum(int x,int l,int r,int L,int R) {
if(l>R||r<L) return 0;
if(L<=l&&r<=R) return sum[x];
pushdown(x,l,r);
return Sum(ls,l,mid,L,R)+Sum(rs,mid+1,r,L,R);
}
}Tr;
void _solve() {
read(n);
for(int i=1;i<=n;i++) {
read(a[i],b[i],t[i]);
O[i]=mk(t[i],i);
}
sort(O+1,O+n+1,[](pii a,pii b) {
return a.fi<b.fi;
});
Tr.build(1,1,n);
int tim=0;
int fl=0;
for(int i=1;i<=n;i++) {
int id=O[i].se;
if(a[id]<b[id]) {
int ID=Tr._get_pos(1,1,n,b[id]);
if(Tr.get_val(1,1,n,ID)>b[id]) ID--;
int to=Tr.query(ID,n,b[id]-id);to--;
if(to==-2) to=n;
tim-=Tr.Sum(1,1,n,id,to);
Tr.update(1,1,n,id,to,mk(1,b[id]-id));
tim+=Tr.Sum(1,1,n,id,to);
}
else {
int ID=Tr._get_pos_(1,1,n,b[id]);
if(Tr.get_val(1,1,n,ID)<b[id]) ID++;
int to=Tr.query_(1,ID,b[id]-id);to++;
if(to==n+2) to=1;
tim+=Tr.Sum(1,1,n,to,id);
Tr.update(1,1,n,to,id,mk(1,b[id]-id));
tim-=Tr.Sum(1,1,n,to,id);
}
if(tim>O[i].fi) {
fl=1;
break;
}
}
if(fl) cout<<"No\n";
else cout<<"Yes\n";
}
bool Med;
signed main() {
ReadIn("move.in");
OutPut("move.out");
read(oo,T);
while(T--) _solve();
cerr<<"\n";
cerr<<(&Med-&Mst)/1024.0/1024<<" MB\n";
cerr<<clock()<<" ms\n";
return 0;
}