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 }
(顺便,既然是模板,就把它记住就好了)

浙公网安备 33010602011771号