RMQ模板

此处举例的是rmq模板。具体思想就不说了。

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cstdlib>
 6 #include <algorithm>
 7 using namespace std;
 8 int a[101010];
 9 int n,q;
10 int f[10101][10101];
11 void rmq()
12 {
13     for(int i=1;i<=n;i++) f[i][0]=a[i];
14     for(int j=1;(1<<j)<=n;j++)
15     {
16         for(int i=1;i+(1<<j)-1<=n;i++)
17         {
18             f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
19         }
20     }
21 }
22 int maxn(int i,int j)
23 {
24     int k=(int)(log((double)i-j+1)/log(2.0));  
25     return max(f[i][k],f[j-(1<<k)+1][k]);
26 }
27 
28 int main()
29 {
30     while(cin>>n)
31     {
32         if(n==0) break;
33         scanf("%d",&q);
34         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
35         rmq();
36         for(int k=1;k<=q;k++)
37         {
38             int i,j;
39             scanf("%d%d",&i,&j);
40             printf("%d\n",maxn(i,j));
41         }
42     }
43     return 0;
44 }
rmq1

(顺便,既然是模板,就把它记住就好了)

posted @ 2017-09-19 17:44  小蒟蒻  阅读(127)  评论(0)    收藏  举报