把
int query(int rt,int l,int r,int x,int y)
{
pushdown(rt);
if (x<=l && y>=r)
{
return mn[rt];
}
int mid=(l+r)>>1;
int ans=-1;
if (x<=mid) ans=query(rt<<1,l,mid,x,y);
if (y>mid) {
if (ans==-1)
ans=query(rt<<1|1,mid+1,r,x,y);
else
ans=min(ans,query(rt<<1|1,mid+1,r,x,y));
}
return ans;
}
改成
int query(int rt,int l,int r,int x,int y)
{
if (x>r || y<l) return 0x7fffffff;//这里改了
pushdown(rt);
if (x<=l && y>=r)
{
return mn[rt];
}
int mid=(l+r)>>1;
int ans=min(query(rt<<1,l,mid,x,y),query(rt<<1|1,mid+1,r,x,y));//这里改了
return ans;
}
就可以AC
而且前一份看评测结果好像返回的ans是-1
主函数调用代码
if (x==nrt)
printf("%lld\n",mn[1]);
else
{
int y=getfa(x,nrt);
if (y==-1)
printf("%lld\n",query(1,1,n,id[x],id[x]+size[x]-1));
else
printf("%lld\n",min(query(1,1,n,1,id[y]-1),query(1,1,n,id[y]+size[y],n)));
}
求助大佬们这是为什么