首页 > 代码库 > POJ 3264
POJ 3264
RMQ模板题
1 #include <iostream> 2 #include <cstdio> 3 #include <string.h> 4 #include <cmath> 5 using namespace std; 6 const int N= 50002; 7 int maxn[N][17],minn[N][17]; 8 int a[N]; 9 int n,q;10 void getRMQ(){11 for(int i=1;i<N;i++){maxn[i][0]=minn[i][0]=a[i];}12 for(int j=1;j<17;j++){13 for(int i=1;i<N;i++){14 if(i+(1<<j)<N){15 maxn[i][j]=max(maxn[i][j-1],maxn[i+(1<<(j-1))][j-1]);16 minn[i][j]=min(minn[i][j-1],minn[i+(1<<(j-1))][j-1]);17 } 18 }19 }20 }21 int rmq(int l,int r){22 int k=(int)(log((double)(r-l+1))/log(2.0));23 int Max=max(maxn[l][k],maxn[r-(1<<k)+1][k]);24 int Min=min(minn[l][k],minn[r-(1<<k)+1][k]);25 return Max-Min;26 }27 int main(){28 int l,r;29 scanf("%d%d",&n,&q);30 for(int i=1;i<=n;i++){31 scanf("%d",&a[i]);32 }33 getRMQ();34 while(q--){35 scanf("%d%d",&l,&r);36 printf("%d\n",rmq(l,r));37 }38 return 0;39 }
POJ 3264
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。