跑st表的代码,在枚举i时,边界是
for (int i=1;i+(1<<j)-1<=n;++i)
这里不减一会被卡测试点1
完整代码是
int logn=log2(n); for (int j=1;j<=logn;++j){ for (int i=1;i+(1<<j)-1<=n;++i){ f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]); } }
加减运算优先级比位运算高 (才不是线段树位运算写错了debug de了一个小时知道的%)