1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e6+10; typedef long long ll; ll tree[N],lazy[N]; void updata(int rt,int l,int r,ll w){ tree[rt]=tree[rt]|w; lazy[rt]=tree[rt]|w; } void pushdown(int rt,int l,int r){ int mid=l+r>>1; updata(rt<<1,l,mid,lazy[rt]); updata(rt<<1|1,mid+1,r,lazy[rt]); lazy[rt]=0; } void modify(int rt,int l,int r,int s,int t,ll w){ if(s<=l&&r<=t){ updata(rt,l,r,w); return; } pushdown(rt,l,r); int mid=l+r>>1; if(s<=mid)modify(rt<<1,l,mid,s,t,w); if(t>mid)modify(rt<<1|1,mid+1,r,s,t,w); tree[rt]=tree[rt<<1]&tree[rt<<1|1]; } ll query(int rt,int l,int r,int s,int t){ if(s<=l&&t>=r)return tree[rt]; pushdown(rt,l,r); int mid=l+r>>1; if(t<=mid)return query(rt<<1,l,mid,s,t); else if(s>mid)return query(rt<<1|1,mid+1,r,s,t); else return query(rt<<1,l,mid,s,t)&query(rt<<1|1,mid+1,r,s,t); } int main(){ int m,n,t;bool flag; freopen("kuai.in","r",stdin); freopen("kuai.out","w",stdout); scanf("%d",&t); while(t--){ flag=1; memset(tree,0,sizeof(tree)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int l,r; ll w; scanf("%d%d%lld",&l,&r,&w); modify(1,1,n,l,r,w); ll data=query(1,1,n,l,r); if(data!=w)flag=0; } if(flag)printf("YES\n"); else printf("NO\n"); } return 0; }
|