#include #define ll long long using namespace std; ll Read() { ll x = 0; int sig = 1; char c = getchar(); while(!isdigit(c)) { if(c == '-') sig = -1; c = getchar(); } while(isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); return x * sig; } void Write(ll x) { if(x < 0) putchar('-'), x = -x; if(x > 9) Write(x / 10); putchar((x % 10) ^ 48); } const int N = 200005, inf = 2e9; int n; struct Box { int a, b, id; ll t; friend bool operator <(Box x, Box y) { return x.t < y.t; } }p[N]; struct SegTree { struct tNode { int l, r, lval, rval, tag; ll sum; inline void Tag(int t) { tag = lval = rval = t, sum = 1ll * t * (r - l + 1); } }a[N << 2]; void PushUp(int u) { a[u].lval = a[u << 1].lval, a[u].rval = a[u << 1 | 1].rval, a[u].sum = a[u << 1].sum + a[u << 1 | 1].sum; } void PushDown(int u) { int &t = a[u].tag; if(t != inf) a[u << 1].Tag(t), a[u << 1 | 1].Tag(t), t = inf; } void Build(int u, int l, int r) { a[u].l = l, a[u].r = r, a[u].tag = inf; if(l == r) { a[u].lval = a[u].rval = a[u].sum = p[l].a; return ; } int mid = (l + r) >> 1; Build(u << 1, l, mid), Build(u << 1 | 1, mid + 1, r), PushUp(u); } void Modify(int u, int ml, int mr, int y) { int l = a[u].l, r = a[u].r, mid = (l + r) >> 1; if(ml <= l && r <= mr) { a[u].Tag(y); return ; } PushDown(u); if(ml <= mid) Modify(u << 1, ml, mr, y); if(mr > mid) Modify(u << 1 | 1, ml, mr, y); PushUp(u); } int Query(int u, int p) { int l = a[u].l, r = a[u].r, mid = (l + r) >> 1; if(l == r) return a[u].lval; PushDown(u); return p <= mid ? Query(u << 1, p) : Query(u << 1 | 1, p); } ll Query_Sum(int u, int ql, int qr) { int l = a[u].l, r = a[u].r, mid = (l + r) >> 1; ll res = 0; if(ql <= l && r <= qr) return a[u].sum; PushDown(u); if(ql <= mid) res += Query_Sum(u << 1, ql, qr); if(qr > mid) res += Query_Sum(u << 1 | 1, ql, qr); return res; } int Search(int u, int val) { // last < val int l = a[u].l, r = a[u].r, mid = (l + r) >> 1; if(l == r) return l; PushDown(u); return a[u << 1 | 1].lval >= val ? Search(u << 1, val) : Search(u << 1 | 1, val); } int Search2(int u, int val) { // first > val int l = a[u].l, r = a[u].r, mid = (l + r) >> 1; if(l == r) return l; PushDown(u); return a[u << 1].rval <= val ? Search2(u << 1 | 1, val) : Search2(u << 1, val); } }seg; void Solve() { int i; n = Read(); for(i = 1; i <= n; i++) p[i].a = Read() - i, p[i].b = Read() - i, p[i].t = Read(), p[i].id = i; seg.Build(1, 1, n), stable_sort(p + 1, p + n + 1); ll curt = 0; for(i = 1; i <= n; i++) { int curp = seg.Query(1, p[i].id); if(curp > p[i].b) { // move left int mp = seg.Search2(1, p[i].b); curt += seg.Query_Sum(1, mp, p[i].id) - 1ll * p[i].b * (p[i].id - mp + 1); seg.Modify(1, mp, p[i].id, p[i].b); } else if(curp < p[i].b) { // move right int mp = seg.Search(1, p[i].b); curt += 1ll * p[i].b * (mp - p[i].id + 1) - seg.Query_Sum(1, p[i].id, mp); seg.Modify(1, p[i].id, mp, p[i].b); } if(curt > p[i].t) { printf("No\n"); return ; } } printf("Yes\n"); } int main() { freopen("move.in", "r", stdin); freopen("move.out", "w", stdout); int T = Read(); T = Read(); while(T--) Solve(); }