社区讨论

MLE??? 21 PTS???

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

讨论操作

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

当前回复
11 条
当前快照
1 份
快照标识符
@m691v6dq
此快照首次捕获于
2025/01/23 16:07
去年
此快照最后确认于
2025/11/04 23:10
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>

using namespace std;
int a[1005],l[1005],r[1005],dp[10005][10005],logx[10005];
int RMB(int l,int r) {
	int k = 0;
	while (l + (1 << (r + 1)) - 1 <= r) {
		k++;
	}
	return max(dp[1][k],dp[r-(1<<k)+1][k]);
}
inline int read() {
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int main() {
	int n = read();
	int m = read();
	for (int i = 1; i <= n; i++) cin >> dp[i][0];
	
	for (int i = 2; i <= n; i++) 
		logx[i] = logx[i/2]+1;
	
	int logn = logx[n];
	
	for(int j=1;j<=logn+1;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); 
	
	for(int i=1;i<=m;i++){
		int l,r;
		l = read();
		r = read();
		int s=logx[r-l+1];
		cout << max(dp[l][s],dp[r-(1<<s)+1][s]) << endl;
	}
	return 0;
}

回复

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

正在加载回复...