求助两种写法的区别
查看原帖
求助两种写法的区别
90027
fanypcd楼主2022/7/1 10:34

最开始为了省事:

auto x = s[pos].lower_bound(v);
return min((x != s[pos].end() ? *x - v : inf), (x != s[pos].begin() ? v - *--x : inf));

改成这个就 AC 了:

auto x = s[pos].lower_bound(v);
ll ret = inf;
if(x != s[pos].end()) ret = min(ret, *x - v);
if(x != s[pos].begin()) ret = min(ret, v - *(--x));
return ret;

请问两种写法有什么区别吗?

似乎是访问顺序的问题(前一种写法中三目运算里 assert(*x >= v) 会 fail)

2022/7/1 10:34
加载中...