POJ 3264 Balanced Lineup 简单RMQ

题目:http://poj.org/problem?id=3264

给定一段区间,求其中最大值与最小值的差。

 #include <stdio.h>
#include <algorithm>
#include <math.h> int dpMin[][], dpMax[][]; int RMinQ(int l, int r)
{
int k = log(1.0 * r-l+)/log(2.0);
return std::min(dpMin[l][k], dpMin[r-(<<k)+][k]);
} int RMaxQ(int l, int r)
{
int k = log(1.0 * r-l+)/log(2.0);
return std::max(dpMax[l][k], dpMax[r-(<<k)+][k]);
} int main()
{
int n, m;
scanf("%d %d", &n, &m);
for(int i = ; i <= n; i++)
{
scanf("%d", &dpMin[i][]);
dpMax[i][] = dpMin[i][];
}
for(int j = ; (<<j) <= n; j++)
{
for(int i = ; i + (<<j) - <= n; i++)
{
dpMax[i][j] = std::max(dpMax[i][j-], dpMax[i+(<<(j-))][j-]);
dpMin[i][j] = std::min(dpMin[i][j-], dpMin[i+(<<(j-))][j-]);
}
}
int x, y;
while(m--)
{
scanf("%d %d", &x, &y);
printf("%d\n", RMaxQ(x, y) - RMinQ(x, y));
}
return ;
}
上一篇:Node.mongoose


下一篇:如何在cmd命令行中查看、修改、删除与添加环境变量,语法格式例子:set path;echo %APPDATA%