Language: C++

#include<stdio.h>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
#define sqr(x) ((x)*(x))
typedef pair<double,double> point;

const double g=9.8;
const double eps=1e-8;
double v;

struct para
{
	double a,b;
	para(){a=b=0;}
	para(double te){b=te;a=-g*(b*b+1)/2/v/v;}
	double qz(double x) {return a*x*x+b*x;}
};

vector<para> init(double x,double y)
{
	vector<para> res;
	double at=g*x*x/2/v/v,bt=-x,ct=y+g/2/v/v*x*x;
	double pbs=sqr(bt)-4*at*ct,pbt=-bt/2/at;
	if(pbs<-eps||fabs(at)<eps) return res;
	if(pbs<eps) {res.push_back(para(pbt));return res;}
	res.push_back(para(pbt+sqrt(pbs)/2/at));
	res.push_back(para(pbt-sqrt(pbs)/2/at));
	return res;
}
vector<double> sol(double at,double bt,double ct)
{
	vector<double> res;
	double pbs=sqr(bt)-4*at*ct,pbt=-bt/2/at;
	if(pbs<-eps||fabs(at)<eps) return res;
	if(pbs<eps) {res.push_back(pbt);return res;}
	res.push_back(pbt+sqrt(pbs)/2/at);
	res.push_back(pbt-sqrt(pbs)/2/at);
	return res;
}

struct rect
{
	double xl,xu,yl,yu;
	rect(double xt=0,double yt=0,double xtt=0,double ytt=0):xl(xt),xu(xtt),yl(yt),yu(ytt){}
};

bool intersect(rect r,para p)
{
	double t1=p.qz(r.xl),t2=p.qz(r.xu);
	if(t1>r.yl+eps&&t1<r.yu-eps) return true;
	if(t2>r.yl+eps&&t2<r.yu-eps) return true;
	if(fabs(t1-r.yu)<eps&&fabs(t2-r.yl)<eps) return true;
	if(fabs(t1-r.yl)<eps&&fabs(t2-r.yl)<eps) return true;
	if(fabs(t1-r.yl)<eps&&fabs(t2-r.yu)<eps) return true;
	vector<double> r1=sol(p.a,p.b,-r.yl);
	for(int i=0;i<r1.size();i++)
		if(r1[i]>r.xl+eps&&r1[i]<r.xu-eps) return true;
	r1=sol(p.a,p.b,-r.yu);
	for(int i=0;i<r1.size();i++)
		if(r1[i]>r.xl+eps&&r1[i]<r.xu-eps) return true;
	return false;
}

int n;
double x,y;
vector<point> po;
vector<rect> ret;

void solve()
{
	int i,j,k,l;
	scanf("%d %lf %lf %lf",&n,&v,&x,&y);
	for(i=0;i<n;i++)
	{
		double xt[5];
		for(j=0;j<4;j++) scanf("%lf",xt+j);
		for(j=0;j<4;j+=2) for(k=1;k<4;k+=2) if(fabs(xt[j])>eps&&fabs(xt[k])>eps) po.push_back(point(xt[j],xt[k]));
		if(xt[0]>x-eps||xt[3]<y+eps) continue;
	       	ret.push_back(rect(xt[0],xt[1],xt[2],xt[3]));
	}
	po.push_back(point(x,y));
	n=ret.size();
	for(i=0;i<po.size();i++)
	{
		vector<para> tet=init(po[i].first,po[i].second);
		if(tet.empty()) continue;
		for(l=0;l<tet.size();l++)
		{
			if(tet[l].qz(x)<y-eps) continue;
			for(j=0;j<n;j++)
			{
				if(intersect(ret[j],tet[l])) break;
			}
			if(j<n) continue;
			for(j=0;j<n;j++)
				if(x>tet[l].xl-eps&&x<tet[l].xu+eps&&tet[l].qz(x)>ret[j].yl+eps&&y<ret[j].yl+eps) break;
			if(j<n) continue;
			{printf("Yes\n");return;}
		}
	}
	printf("No\n");
}

int main()
{
	solve();
	scanf("%d",&n);
	return 0;
}

Compiler output:
a.cc: In function 'void solve()':
a.cc:98:45: error: '__gnu_cxx::__alloc_traits<std::allocator<para>, para>::value_type' {aka 'struct para'} has no member named 'xl'
   98 |                                 if(x>tet[l].xl-eps&&x<tet[l].xu+eps&&tet[l].qz(x)>ret[j].yl+eps&&y<ret[j].yl+eps) break;
      |                                             ^~
a.cc:98:62: error: '__gnu_cxx::__alloc_traits<std::allocator<para>, para>::value_type' {aka 'struct para'} has no member named 'xu'
   98 |                                 if(x>tet[l].xl-eps&&x<tet[l].xu+eps&&tet[l].qz(x)>ret[j].yl+eps&&y<ret[j].yl+eps) break;
      |                                                              ^~