洛谷:P3865 【模板】ST表(普及/提高- ,二叉堆与 ST 表)

题目:

在这里插入图片描述

分析:想了想,好像之前有一道题的一小问涉及到了这个问题。当时好像用的是倍增什么的,反正用到了2的倍数相关的。还有dp。

嗯,题解中也是这样。

在这里插入图片描述

剩下的自己先尝试者写。

不会,翻了翻之前的,果然是做过的。

之前博客

有一点又细想了一下,为什么先j后I:

洛谷:P3865 【模板】ST表(普及/提高- ,二叉堆与 ST 表)_第1张图片

值的思考确实就是这样子的。

代码:

#include
using namespace std;
int A[100005];
int m,n;
int A1[100005][100];
void f(int x1,int x2)
{
     
 int k=0;
 while(1)
 {
     
  if((1<<(k+1)) > x2-x1+1 ) break;
  k++;
 }
 cout<<max(A1[x1][k],A1[x2-(1<<k)+1][k])<<endl;
}
int main()
{
     
 cin>>m>>n;
 for(int i=1;i<=m;i++) cin>>A[i];
 for(int i=1;i<=m;i++) A1[i][0]=A[i];
 for(int j=1;(1<<j)<=m;j++)
 for(int i=1;i+(1<<j)-1<=m;i++)
 A1[i][j]=max(A1[i][j-1],A1[i+(1<<(j-1))][j-1]);
 for(int i=1;i<=n;i++)
 {
     
  int a,b; cin>>a>>b;
  f(a,b);
 }
} 

T了只是因为没用题目给的输入。

你可能感兴趣的:(二叉堆与,ST,表,倍增)