本人RE,结果数组开了10倍就A掉了。。
原因:本人代码:
const int g=200005,h=800005;
表示数组范围。
错误代码:
if(s<<1|1<h)
d[s]=d[s<<1]+d[s<<1|1];
else d[s]=0;
判断一下当前节点s有没有儿子。(叶子结点没有儿子。但是叶子结点的s<<1|1可能超过数组边界,要特判)
但是!我经过长时间查错后发现:|的优先级竟然比<还要低!(本来以为<优先级很低的。。)
于是:干脆改成:
if(l==r) d[s]=0;
else d[s]=d[s<<1]+d[s<<1|1];
这样更加简单便捷,还不容易出错。
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin
运算符优先级一定要搞清楚!强烈建议背会!!