POJ3264 比较裸的区间最值问题。用线段树或者ST表都可以。此处我们用ST表解决。

ST表建表方法采用动态规划的方法, ST[I][J]表示数组从第I位到第 I+2^J-1 位的最值,用二分的思想建立动规方程。

查询方法就不用说了 非常简单。

我这个查询写的稍微有点问题, 理想的ST表查询应该是O(1)的 我写成了O(logn)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm> const int maxn=50000+1,maxq=200000; int stmax[maxn][17],stmin[maxn][17],hei[maxn],n,q; using namespace std; void build()
{
memset(stmax,0,sizeof(stmax));memset(stmin,0,sizeof(stmin));
for(int i=0;i<17;i++)
for(int j=1;j<=n;j++)
{
int len=1<<i;
if(j+len-1>n)break;
len=len>>1;
if(i==0){stmax[j][i]=stmin[j][i]=hei[j];continue;}
stmax[j][i]=max(stmax[j][i-1],stmax[j+len][i-1]);
stmin[j][i]=min(stmin[j][i-1],stmin[j+len][i-1]);
}
} int query(int val[][17],int l,int r,bool flag)
{
int len=(r-l+1),ans;
if(flag)ans=1<<30;
else ans=0;
int tot=0,lp=1;
while(len>0&&tot<17&&(l+(1<<tot))<=r+1)
{
if((len%2)==0){tot++;len=len>>1;lp=lp<<1;continue;}
if(flag)ans=min(ans,val[l][tot]);
else ans=max(ans,val[l][tot]);
tot++;len=len>>1;l+=lp;lp=lp<<1;
}
return ans;
}
int main()
{freopen("t.txt","r",stdin);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",&hei[i]);
build();
int l,r;
for(int i=0;i<q;i++)
{
scanf("%d%d",&l,&r);
printf("%d\n",query(stmax,l,r,0)-query(stmin,l,r,1));
}
return 0;
}

  

POJ 3264 Balanced Lineup 区间最值的更多相关文章

  1. poj 3264 Balanced Lineup 区间极值RMQ

    题目链接:http://poj.org/problem?id=3264 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) alw ...

  2. Poj 3264 Balanced Lineup RMQ模板

    题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...

  3. POJ 3264 Balanced Lineup 【ST表 静态RMQ】

    传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total S ...

  4. POJ - 3264 Balanced Lineup (RMQ问题求区间最值)

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...

  5. POJ 3264 Balanced Lineup 【线段树/区间最值差】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...

  6. poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】

    题目地址:http://poj.org/problem?id=3264 Sample Input 6 3 1 7 3 4 2 5 1 5 4 6 2 2 Sample Output 6 3 0分析:标 ...

  7. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

  8. POJ - 3264——Balanced Lineup(入门线段树)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 68466   Accepted: 31752 ...

  9. poj 3264 Balanced Lineup (RMQ)

    /******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...

随机推荐

  1. 小程序wx:key = “{{*this}}”报错

    解决方案:改为 wx:key = "*this"

  2. TWaver MONO模板库新鲜出炉 精彩纷呈

    MONO Design在线3D建模平台网站, www.mono-design.cn,开发组的成员们已经开始紧锣密鼓的对这个平台进行内测.在之前的文章里,我们提到用户可以获得多种多样的TWaver官方模 ...

  3. enote笔记语言(5)——其他(ver0.2)

    章节:其他   ((主:单词))                               用来醒目地强调这个句子中哪个词语作主语 sentence:                         ...

  4. ZOJ - 3985 - String of CCPC (思维 + 暴力)

    题意: 询问一共有有多少个CCPC,每个得1分,可以自己在任意位置添加字母,第i次添加需要耗费i-1分 思路: 既然每次添加需要耗分,添加第二个字母,相当于没有添加,所以只需要添加一次就好 先计算出原 ...

  5. 常量、变量;基本数据类型;input()、if、while、break、continue

    一.编译型语言和解释型语言区别:编译型:一次性将所有程序编译成二进制文件 缺点:开发效率低,不能跨平台 优点:运行速度快. 例如:C,C++等解释型:当程序执行时,一行一行的解释 优点:开发效率高,可 ...

  6. buf.writeUInt16BE()

    buf.writeUInt16BE(value, offset[, noAssert]) buf.writeUInt16LE(value, offset[, noAssert]) value {Num ...

  7. wannafly-day1 Problem B-Board

    思路:这个题队友过的,我的思路是枚举行和列,将除了要求位置初始0,每行最小值相减,每列最小值相减,直到除了要求的位置,别的位置都为零,则那个位置取绝对值就行了,有点麻烦应该能过,但是他没有用我给的想法 ...

  8. PAT 1085 PAT单位排行

    每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤10^5),即考生人数.随后 N 行,每行按下列格式给出一个考生的信 ...

  9. i2c中start和restart的区别

    有的硬件芯片提供了一个个寄存器,供我们很好的操作i2c,但是,在用的时候,我们是不知道他到地是怎么操作的,下边,我就探讨下i2c中的start和restart的区别. start是在scl是高电平的时 ...

  10. Ural 1114 Boxes

    Boxes Time Limit: 600ms Memory Limit: 16384KB This problem will be judged on Ural. Original ID: 1114 ...