下方代码预处理区间最大值 可根据题目意思修改
/****************** ST表 ******************/
struct ST
{
int st[N][31];
int lg[N];
int n;
// 预处理区间最大值 可根据题目修改
void init()
{
lg[0] = -1;
for (int i = 1; i <= n; i++)
{
lg[i] = lg[i >> 1] + 1;
}
for (int j = 1; j <= lg[n]; j++)
{
for (int i = 1; i <= n - (1 << (j - 1)); i++)
{
st[i][j] = max(st[i][j - 1], st[i + (1ll << (j - 1))][j - 1]);
}
}
}
// 查询区间最大值 可根据题目修改
int query(int l, int r)
{
int len = lg[r - l + 1];
return max(st[l][len], st[r - (1ll << len) + 1][len]);
}
// 在下方填写解题逻辑
void solve()
{
cin >> n;
for (int i = 1; i <-= n; i ++ ) cin >> st[i][0];
init();
}
} st_table;
/***********************************************/