ST表
ST 表基于 倍增 思想,,O(1)回答每个询问。但是不支持修改操作。 用于求区间最值。
建树
for (int j = 1; (1 << j) <= n; j++)
{
for (int i = 1; i + (1 << j) - 1 <= n; i++)
{
stmin[i][j] = min(stmin[i][j - 1], stmin[i + (1 << j - 1)][j - 1]);
stmax[i][j] = max(stmax[i][j - 1], stmax[i + (1 << j - 1)][j - 1]);
}
}
查询
while(q--)
{
int l, r;
cin >> l >> r;
int x = log2(r - l + 1);
cout << max(stmax[l][x], stmax[r - (1 << x) + 1][x]) - min(stmin[l][x], stmin[r - (1 << x) + 1][x]) << endl;
}
本文来自博客园,作者:流氓兔LMT,转载请注明原文链接:https://www.cnblogs.com/-include-lmt/p/18683859

浙公网安备 33010602011771号