#include<bits/stdc++.h>
#define fi first
#define se second
#define show(x) cerr<<#x<<"="<<x<<"\n"
typedef long long ll;
using namespace std;
const int dy[]={1,0,-1};
const int dx[]={1,0,-1};
int n,m,h,w;
string s;
int a[200011],b[200011];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.precision(10);
cout<<fixed;
#ifdef LOCAL_DEFINE
FILE *stream1;
stream1=freopen("in","r",stdin);
if(stream1==NULL)return 0;
#endif
cin>>n>>w>>h;
vector<pair<int,int> > okx,oky;
for(int i=0;i<n;i++){
int x,y,z;cin>>x>>y>>z;
okx.push_back({x-z,x+z});
oky.push_back({y-z,y+z});
}
for(int i=0;i<n;i++){
if(okx[i].fi<0)okx[i].fi=0;
if(okx[i].se>w)okx[i].se=w;
a[2*okx[i].fi]++;
a[2*okx[i].se+1]--;
}
for(int i=0;i<n;i++){
if(oky[i].fi<0)oky[i].fi=0;
if(oky[i].se>h)oky[i].se=h;
b[2*oky[i].fi]++;
b[2*oky[i].se+1]--;
}
for(int i=1;i<=2*w;i++){
a[i]=a[i-1]+a[i];
}
for(int j=1;j<=2*h;j++){
b[j]=b[j-1]+b[j];
}
bool flag1=1,flag2=1;
for(int i=0;i<=2*w;i++){
if(a[i]<=0)flag1=0;
}
for(int i=0;i<=2*h;i++){
if(b[i]<=0)flag2=0;
}
if(flag1 || flag2)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
#ifdef LOCAL_DEFINE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
fclose(stream1);
#endif
return 0;
}
- 0からwまでの範囲を全て網羅されているかもしくは、0からhまでの範囲を全て網羅していたらYes
- 反省することは、点と点の間の空間も配列として持っておくこと(点空間点空間点空間…みたいに)