RMQ 数据结构
RMQ 常用的数据结构之一
直接上代码 马克好来 是个好板子
1 #include <stdio.h> 2 #define min(a,b) a<b ? a : b 3 4 int arr[10005],d[10005][100]; 5 void RMQ(int n) 6 { 7 for(int i=0; i<n; i++) d[i][0]=arr[i]; 8 for(int j=1; (1<<j)<=n; j++) 9 for(int i=0; i+(1<<j)-1<n; i++) 10 d[i][j] = min(d[i][j-1],d[i+(1<<(j-1))][j-1]); 11 } 12 int SRMQ(int l,int r) 13 { 14 int k=0; 15 while((1<<(k+1)) <= r-l+1) k++; 16 return min(d[l][k],d[r-(1<<k)+1][k]); 17 } 18 int main() 19 { 20 int n,q,l,r; 21 while(~scanf("%d",&n)) 22 { 23 for(int i=0; i<n; i++) 24 scanf("%d",arr+i); 25 RMQ(n); 26 scanf("%d",&q); 27 while(q--) 28 { 29 scanf("%d%d",&l,&r); 30 printf("%d\n",SRMQ(l,r)); 31 } 32 } 33 return 0; 34 }