社区讨论

求助,为什么最后的t可以这么求

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

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@mi6z4878
此快照首次捕获于
2025/11/20 13:11
4 个月前
此快照最后确认于
2025/11/20 13:11
4 个月前
查看原帖
看下代码
CPP
#include<cstdio>
#include<cstdlib>
using namespace std;
int n,m,b[17][100007],x,y,k,t;
int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;++i)
		scanf("%d",&b[0][i]);
	for (int j=1;(1<<j)<=n;++j)
		for (int i=1;i<=n-(1<<j)+1;++i)
			if (b[j-1][i]>b[j-1][i+(1<<(j-1))])
				b[j][i]=b[j-1][i];
			else
				b[j][i]=b[j-1][i+(1<<(j-1))];
	for (int i=1;i<=m;++i)
	{
		scanf("%d%d",&x,&y);
		k=y-x;
		t=0;
		while (k>=2)
		{
			k=k>>1;
			t++;
		}
		if (b[t][x]>b[t][y-(1<<t)+1])
			printf("%d\n",b[t][x]);
		else
			printf("%d\n",b[t][y-(1<<t)+1]);
	}
	return 0;
}

回复

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

正在加载回复...