从其他题来吃经验的,代码中查询的部分本来是:
inline int query(int tl,int tr,int x,int l,int r){
int p1=t[t[tr].l].sum-t[t[tl].l].sum,p2=t[t[tr].r].sum-t[t[tl].r].sum;
if(l==r)return l;
int mid=(l+r)>>1;
if(p1>x)return query(t[tl].l,t[tr].l,x,l,mid);
if(p2>x)return query(t[tl].r,t[tr].r,x,mid+1,r);
return 0;
}
但是在这道题莫名其妙wa了,而改成如下:
inline int query(int tl,int tr,int x,int l,int r){
int p1=t[t[tr].l].sum-t[t[tl].l].sum,p2=t[t[tr].r].sum-t[t[tl].r].sum;
if(l==r)return l;
int mid=(l+r)>>1;
if(p1>x){
int ans=query(t[tl].l,t[tr].l,x,l,mid);
if(ans)return ans;
}
if(p2>x){
int ans=query(t[tl].r,t[tr].r,x,mid+1,r);;
if(ans)return ans;
}
return 0;
}
就能AC,蒟蒻我认为这两种应该没什么差异,因为如果在一边区间找到大于一半的另一边应该小于一般,就算这边没查到,返回的也应该还是零,而不是其他数字。求大佬解答