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

poj 3264 RMQ 水题

时间:2015-03-20 23:37:00      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

题意:找到一段数字里最大值和最小值的差

水题

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 const int maxn=550;
 9 const int INF=0x3f3f3f3f;
10 int n,m,t;
11 const int MAXN = 50010;
12 int dpMAX[MAXN][20],dpMIN[MAXN][20];
13 int mm[MAXN];
14 int cow[MAXN];
15 //初始化RMQ, b数组下标从1开始,从0开始简单修改
16 void initMAXRMQ(int n,int b[])
17 {
18     mm[0] = -1;
19     for(int i = 1; i <= n;i++)
20     {
21         mm[i] = ((i&(i-1)) == 0)?mm[i-1]+1:mm[i-1];
22         dpMAX[i][0] = b[i];
23     }
24     for(int j = 1; j <= mm[n];j++)
25     for(int i = 1;i + (1<<j) -1 <= n;i++)
26     dpMAX[i][j] = max(dpMAX[i][j-1],dpMAX[i+(1<<(j-1))][j-1]);
27 }
28 //查询最大值
29 int rmqmMAX(int x,int y)
30 {
31     int k = mm[y-x+1];
32     return max(dpMAX[x][k],dpMAX[y-(1<<k)+1][k]);
33 }
34 void initMINRMQ(int n,int b[])
35 {
36     mm[0] = -1;
37     for(int i = 1; i <= n;i++)
38     {
39         mm[i] = ((i&(i-1)) == 0)?mm[i-1]+1:mm[i-1];
40         dpMIN[i][0] = b[i];
41     }
42     for(int j = 1; j <= mm[n];j++)
43     for(int i = 1;i + (1<<j) -1 <= n;i++)
44     dpMIN[i][j] = min(dpMIN[i][j-1],dpMIN[i+(1<<(j-1))][j-1]);
45 }
46 //查询最大值
47 int rmqMIN(int x,int y)
48 {
49     int k = mm[y-x+1];
50     return min(dpMIN[x][k],dpMIN[y-(1<<k)+1][k]);
51 }
52 int main()
53 {
54     int i,j,k;
55     #ifndef ONLINE_JUDGE
56     freopen("1.in","r",stdin);
57     #endif
58     int q;
59     while(scanf("%d%d",&n,&q)!=EOF)
60     {
61         for(i=1;i<=n;i++)
62         {
63             scanf("%d",&cow[i]);
64         }
65         initMAXRMQ(n,cow);
66         initMINRMQ(n,cow);
67         for(i=1;i<=q;i++)
68         {
69             int a,b;
70             scanf("%d%d",&a,&b);
71             printf("%d\n",rmqmMAX(a,b)-rmqMIN(a,b));
72         }
73     }
74     return 0;
75 }

 

poj 3264 RMQ 水题

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4354812.html

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