为什么是先遍历长度而不是起点
查看原帖
为什么是先遍历长度而不是起点
800543
NirvanaCeleste楼主2024/8/31 13:41

题解

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

我的代码

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;
2024/8/31 13:41
加载中...