好像没有这么着挂的
应该是 ai<0 挂了(但不知道为什么会挂掉)
从官网上下载了数据发现每个都只差一点。。。
#include<bits/stdc++.h>
using namespace std;
struct node{
long long l,r;
};
inline bool cmp(node x,node y){
return x.r<y.r||(x.r==y.r&&x.l<y.l);
}
long long n,m,L,T,vxi,d,v,a,s,p[100005],sum[1000005],over_num,num;
vector<node>e;
vector<node>q;
void solve(){
e.clear(),q.clear();over_num=num=0;
memset(sum,0,sizeof(sum));
scanf("%lld%lld%lld%lld",&n,&m,&L,&vxi);
for(int i=1;i<=n;++i){
scanf("%lld%lld%lld",&d,&v,&a);
if(L<d)continue;
if(a==0){
if(v>vxi){
e.push_back((node){d,L});
}
continue;
}
s=vxi*vxi-v*v;
if(a>0){
if(s>=0)s=d+s/(a<<1)+1;
else s=d;
if(s<=L)e.push_back((node){s,L});
}else{
if(s<1)e.push_back((node){d,min(d+(s+1)/(a<<1),L)});
}
}
for(int i=1;i<=m;++i){
scanf("%lld",&p[i]);
sum[p[i]]=1;
}
for(int i=1;i<=1000000;++i)sum[i]+=sum[i-1];
for(int i=0;i<e.size();++i){
if(sum[e[i].r]-sum[e[i].l-1]>0)over_num++,q.push_back(e[i]);
}
printf("%lld ",over_num);
sort(q.begin(),q.end(),cmp);
for(int i=0,j=1;i<q.size();){
while(j+1<=m&&p[j+1]<=q[i].r)++j;
++num;
while(i<q.size()&&p[j]>=q[i].l)++i;
}
printf("%lld\n",m-num);
}
int main()
{
// freopen("detect8.in","r",stdin);
// freopen("detect8.out","w",stdout);
scanf("%lld",&T);
while(T--)solve();
return 0;
}