求助,为什么下发的5个样例都过了,在洛谷上交就只有20分?
#include<bits/stdc++.h>
using namespace std;
long long T,n,m,L,V,d[100010],v[100010],a[100010],p[100010],cnt;
struct node{
long long l,r;
}t[100010];
bool pd[100010];
bool cmp(node a,node b){
if(a.l==b.l)return a.r<b.r;
return a.l<b.l;
}
int main()
{
ios::sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n>>m>>L>>V;
for(int i=1;i<=n;i++){
cin>>d[i]>>v[i]>>a[i];
pd[i]=0;
}
for(int i=1;i<=m;i++){
cin>>p[i];
}
cnt=0;
for(int i=1;i<=n;i++){
if(d[i]>p[m])continue;
if(a[i]>=0){
if(v[i]*v[i]+2*a[i]*(p[m]-d[i])<=V*V)continue;
int l=1,r=m,mid;
while(l<r){
mid=(l+r)/2;
if(p[mid]>=d[i]&&v[i]*v[i]+2*a[i]*(p[mid]-d[i])>V*V)r=mid;
else l=mid+1;
}
t[++cnt].l=l;
t[cnt].r=n;
}
else{
int l=1,r=m,mid;
while(l<r){
mid=(l+r)/2;
if(p[mid]>=d[i])r=mid;
else l=mid+1;
}
if(v[i]*v[i]+2*a[i]*(p[l]-d[i])<=V*V)continue;
int l1=l,r1=m,mid1;
while(l1<r1){
mid1=(l1+r1+1)/2;
if(v[i]*v[i]+2*a[i]*(p[mid1]-d[i])<=V*V)r1=mid1-1;
else l1=mid1;
}
t[++cnt].l=l;
t[cnt].r=l1;
}
}
cout<<cnt<<" ";
sort(t+1,t+cnt+1,cmp);
long long k=-1e9,ans=0;
for(int i=1;i<=cnt;i++){
if(t[i].l>k)ans++,k=t[i].r;
else k=min(k,t[i].r);
}
cout<<m-ans<<"\n";
}
return 0;
}