Balanced Lineup(RMQ)
Posted ghostfly233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Balanced Lineup(RMQ)相关的知识,希望对你有一定的参考价值。
就是裸RMQ啊。。
求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以。
至于算法嘛。自己学~(好吧,放个传送门。。。)
然后就是最后把maxsum-minsum就好啦233~
时间效率:预处理O(N)查找O(1)
是不是很快~
下面贴代码
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int n,q; int a,b; int maxsum,minsum; int maxn[50001][20]; int num[50001]; int minn[50001][20]; void RMQ(int s) { for(int j=1;j<=19;j++) for(int i=1;i<=n;i++){ if(i+(1<<j)-1<=n) { maxn[i][j]=max(maxn[i][j-1],maxn[i+(1<<(j-1))][j-1]); minn[i][j]=min(minn[i][j-1],minn[i+(1<<(j-1))][j-1]); } } } int main(){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) { scanf("%d",&num[i]); maxn[i][0]=minn[i][0]=num[i]; } RMQ(n); for(int i=1;i<=q;i++) { scanf("%d%d",&a,&b); int k=(int)(log(b-a+1.0)/log(2.0)); maxsum=max(maxn[a][k],maxn[b-(1<<k)+1][k]); minsum=min(minn[a][k],minn[b-(1<<k)+1][k]); printf("%d\\n",maxsum-minsum); } }
以上是关于Balanced Lineup(RMQ)的主要内容,如果未能解决你的问题,请参考以下文章
poj--3264 Balanced Lineup(裸的RMQ)
poj 3264 Balanced Lineup RMQ问题
POJ - 3264 Balanced Lineup (RMQ问题求区间最值)