Pagini recente » Cod sursa (job #2521512) | Cod sursa (job #801418) | Cod sursa (job #2023002) | Cod sursa (job #431653) | Cod sursa (job #334498)
Cod sursa(job #334498)
#include <iostream>
using namespace std;
#define nr 100002
#define NMAX 100002
#define MMAX 1000002
long i,n,m,I,J,a[NMAX],t[MMAX];
void build(long k, long beg, long end){
if(beg==end){
t[k]=a[beg];
return;
}
else {
build(k*2,beg,(beg+end)/2);
build(k*2+1,(beg+end)/2+1,end);
}
if(t[k*2]<=t[k*2+1])
t[k]=t[k*2];
else
t[k]=t[k*2+1];
}
long minim(long k, long beg, long end){
if (J<beg || I>end)
return nr;
if (I<=beg && J>=end)
return t[k];
long x=minim(k*2,beg,(beg+end)/2);
long y=minim(k*2+1,(beg+end)/2+1,end);
if(x<=y)
return x;
else
return y;
}
int main(){
freopen("rmq.in", "r", stdin);
scanf("%ld %ld", &n,&m);
for (i=1; i<=n; i++){
scanf("%ld ", &a[i]);
}
build(1,1,n);
freopen("rmq.out", "w", stdout);
for (i=1; i<=m; i++){
scanf("%ld %ld", &I,&J);
printf("%ld\n",minim(1,1,n));
}
return 0;
}