Pagini recente » Cod sursa (job #2931437) | Cod sursa (job #2986419) | Cod sursa (job #1651155) | Cod sursa (job #3207928) | Cod sursa (job #1216352)
#include <iostream>
#include <stdio.h>
using namespace std;
int N,M,segtree[1000000],a[100000],ql,qr,MIN;
void build_tree(int nod, int l, int r){
if (l==r){
segtree[nod]=a[l];
return;
}
int mid=(l+r)/2;
build_tree(nod*2,l,mid);
build_tree(nod*2+1,mid+1,r);
segtree[nod]=min(segtree[nod*2],segtree[nod*2+1]);
}
void query(int nod, int l, int r){
if (ql<=l && r<=qr){
MIN=min(MIN,segtree[nod]);
return;
}
int mid=(l+r)/2;
if (ql<=mid) query(nod*2,l,mid);
if (mid<qr) query(nod*2+1,mid+1,r);
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d\n",&N,&M);
int i;
for (i=1; i<=N; i++)
scanf("%d",&a[i]);
build_tree(1,1,N);
for (i=1; i<=M; i++){
scanf("%d %d",&ql,&qr);
MIN=1000000;
query(1,1,N);
printf("%d\n",MIN);
}
return 0;
}