根号分治处理第四个操作所求的数小于 lim 的时候,我第一次是这样写的:
for(int j = 1; j <= n; ++j){
lst[a[j]] = j;
if(a[j] * i <= maxn){
Max[j] = max(Max[j], lst[a[j] * i]);
}
if(a[j] % i == 0){
Max[j] = max(Max[j], lst[a[j] / i]);
}
}
然后 WA 28pts。
后来参考题解区的做法,改成了这种:
int p = 0;
for(int j = 1; j <= n; ++j){
lst[a[j]] = j;
if(a[j] * i <= maxn){
p = max(p, lst[a[j] * i]);
}
if(a[j] % i == 0){
p = max(p, lst[a[j] / i]);
}
Max[j] = p;
}
就过了,请问这两种写法有哪些不同,为什么是错的,非常感谢!