【ST-在线算法 预处理O(nlog(n)) 查询O(1)】
用于查询静态区间[a,b]的最值(max换成min就是最小值)
每次合并上来的区间可能会有重复段
void st_init(int n)
{
repe(i,1,n) dp[i][0] = a[i];//下标从1开始的
for(int j = 1; (1<<j) <= n; j++)
{
for(int i = 1; i+(1<<j)-1 <= n; i++)//下标从1开始的
dp[i][j] = max(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
}
}
int st(int x, int y)
{
int k = 0;
while((1<<(k+1)) <= y-x+1) k++;
return max(dp[x][k], dp[y-(1<<k)+1][k]);
}