码迷,mamicode.com
首页 > 其他好文 > 详细

RMQ裸题

时间:2016-11-04 23:16:07      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:tor   printf   define   .com   isp   open   区间   can   rmq   

POJ 3264

题目大意:求一段区间内最大值与最小值之差

技术分享
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cmath>
 6 #define maxn 50005
 7 using namespace std;
 8 int n,m,a[maxn];
 9 int ma[maxn][20],mi[maxn][20];
10 void pre()
11 {
12     for(int i=1;i<=n;i++) mi[i][0]=a[i],ma[i][0]=a[i];
13     for(int j=1;(1<<j)<=n;j++)
14     for(int i=1;i+(1<<j)-1<=n;i++)
15     mi[i][j]=min(mi[i][j-1],mi[i+(1<<(j-1))][j-1]),
16     ma[i][j]=max(ma[i][j-1],ma[i+(1<<(j-1))][j-1]);
17 } 
18 int query(int l,int r)
19 {
20     int k=trunc(log2(r-l+1));
21     return (max(ma[l][k],ma[r-(1<<k)+1][k])-min((mi[l][k]),mi[r-(1<<k)+1][k]));
22 }
23 int main()
24 {
25     int l,r;
26     scanf("%d%d",&n,&m);
27     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
28     pre();
29     for(int i=1;i<=m;i++)
30     {
31         scanf("%d%d",&l,&r);
32         printf("%d\n",query(l,r));
33     }
34     return 0;
35 } 
View Code

以上 by dsb LQ_double

RMQ裸题

标签:tor   printf   define   .com   isp   open   区间   can   rmq   

原文地址:http://www.cnblogs.com/LQ-double/p/6031749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!