ST 表

前言

大区间被两个小区间覆盖
静态求RMQ

代码

#include<bits/stdc++.h>
using namespace std;
#define N 100005
#define M 1000
int n;
int max_a[N];
int dp_max[N][M]; 
int couans(int l,int r)
{
	int k=log2(r-l+1);
	int ans=max(dp_ans[k][l],dp_ans[k][r-(1<<k)+1]);
	return ans;
}
int main()
{
	 cin>>n;
	 for(int i=1;i<=n;i++)
	 {
	 	cin>>max_a[i];
	 }
	 int kk=log2(n);
	 for(int k=1;k<=kk;k++)
	 {
	 	for(int i=1;i+(1<<k)<=n+1;i++)//第1轮每次增加1 
	 	{
	 		dp_max[k][i]=max(dp[k-1][i],dp[k-1][i+(1<<(k-1))]);
		 }
	 }
	 int mm;
	 cin>>mm;
	 while(mm--)
	 {
	 	int l,r;
	 	cin>>l>>r;
	 	cout<<couans(l,r)<<endl;
	 }
	return 0;
}
posted @ 2024-11-27 17:26  流氓兔LMT  阅读(28)  评论(0)    收藏  举报