萌新刚接触 OI,看不懂第一篇题解。 他说他的做法是“二分 + SPFA就轻松A了”,我在他的代码中看到了如下片段:
int Lower(int o,int l,int r,int ql,int qr)
{
if (ql > qr) return inf;
if (ql <= l && r <= qr) return Left[o];
int mid = (l + r) >> 1,ret = inf;
if (ql <= mid) ret = Lower(o<<1,l,mid,ql,qr);
if (ret < inf) return ret;
if (qr > mid) ret = Lower(o<<1|1,mid+1,r,ql,qr);
return ret;
}
int Upper(int o,int l,int r,int ql,int qr)
{
if (ql > qr) return 0;
if (ql <= l && r <= qr) return Right[o];
int mid = (l + r) >> 1,ret = 0;
if (qr > mid) ret = Upper(o<<1|1,mid+1,r,ql,qr);
if (ret) return ret;
if (ql <= mid) ret = Upper(o<<1,l,mid,ql,qr);
return ret;
}
不懂就问,这个就是你们说的二分吗?
正经的说我认为该篇题解抄袭了这篇题解,且并没有配上相关讲解甚至有误导倾向,不过这道题确实存在比现在题解区更优的做法,我建议放上这位大佬的题解代替之。