求助:为什么这种写法是错的
查看原帖
求助:为什么这种写法是错的
357163
shyr楼主2022/5/10 23:17

根号分治处理第四个操作所求的数小于 limlim 的时候,我第一次是这样写的:

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;
}

就过了,请问这两种写法有哪些不同,为什么是错的,非常感谢!

2022/5/10 23:17
加载中...