📄 st.cpp
字号:
/*
Date: 27/07/08 14:52
Description: RMQ--ST算法
*/
#include <iostream>
#include <cmath>
#define max(a , b) (a > b ? a : b)
#define min(a , b) (a < b ? a : b)
const int MaxN = 10000 + 1;
int f[MaxN][33] , N , a[MaxN];
void Input()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&N);
int i;
for (i = 1 ; i <= N ; i++)
scanf("%d" , &a[i]);
}
void Pre()
{
int i , k , j;
for (i = 1 ; i <= N ; i++)
f[i][0] = a[i];
k = int (log( (double) N )/ log(2.0));
for (j = 1 ; j <= k ; j++)
for (i = 1 ; i <=N - (1<<(j - 1)) ; i++)
f[i][j] = max(f[i][j-1] , f[i + (1 << (j - 1))][j-1]) ;
}
void RMQ()
{
int l , r , k;
while (scanf("%d%d",&l,&r) == 2)
{
k = int( log( double (r-l+1))/ log(2.0) );
printf("%d\n",max(f[l][k] , f[ r - (1 << k) + 1][k]));
}
}
int main()
{
Input();
Pre();
RMQ();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -