社区讨论

为什么是先遍历长度而不是起点

P3865【模板】ST 表 & RMQ 问题参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m0hpus8q
此快照首次捕获于
2024/08/31 13:42
2 年前
此快照最后确认于
2025/11/04 21:57
4 个月前
查看原帖
题解
CPP
scanf("%d%d",&n,&m); lg[1]=0;
	for (int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
    //求lg[i]函数。
	for (int i=1;i<=n;i++) scanf("%d",&f[i][0]);
	for (int j=1;j<=lg[n];j++)
	for (int i=1;i<=n-(1<<j)+1;i++){ //注意两个边界
		f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
	}	
我的代码
CPP
mylog[0] = -1;
	for(int i=1;i<=n;i++) read(a[i]),st[i][0] = a[i],mylog[i] = mylog[i>>1] + 1;
	for(int i=1;i<=n;i++){
		for(int j=1;i+(1<<j)-1<=n;j++){
			st[i][j] = mymax(st[i][j-1],st[i+(1<<(j-1))][j-1]);// not i+(1<<(j-1))-1
		}
	}
	return;

回复

3 条回复,欢迎继续交流。

正在加载回复...