http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1042
询问区间最小值 裸RMQ
还是多敲几遍吧!
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int n;
int s[maxn];
int segTree[maxn*4+10];
void build(int node,int beg,int en)
{
if(beg == en) segTree[node] = s[beg];
else {
build(node*2,beg,(beg+en)/2);
build(node*2+1,(beg+en)/2+1,en);
segTree[node] = min(segTree[node*2],segTree[node*2+1]);
}
}
int query(int a,int b,int k,int l,int r)
{
if(l > b || r < a) return 1<<31-1;
if(a <= l && r <= b) return segTree[k];
return min(query(a,b,2*k,l,(l+r)/2),query(a,b,2*k+1,(l+r)/2+1,r));
}
int main()
{
scanf("%d",&n);
for(int i = 1 ; i <= n ; i ++) scanf("%d",&s[i]);
for(int i = 1 ; i <= 2*n ; i ++) segTree[i] = 1<<31-1;
build(1,1,n);
int q;
scanf("%d",&q);
while(q--) {
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",query(a,b,1,1,n));
}
return 0;
}