Pagini recente » Cod sursa (job #409837) | Cod sursa (job #2095389) | Cod sursa (job #1746397) | Cod sursa (job #926745) | Cod sursa (job #688624)
Cod sursa(job #688624)
#include<stdio.h>
using namespace std;
int sir[500000], x , y, e,Min;
int MIN(int a , int b){
if(a>b)return b;return a;
}
void rmq1(int i , int j , int pos) {
sir[pos]=MIN(e,sir[pos]);
if(i==j)return;
if(x<=(i+j)/2)
rmq1(i,(i+j)/2,pos*2);
if(x>(i+j)/2)
rmq1((i+j)/2+1,j,pos*2+1);
}
void rmq2(int i , int j , int pos) {
if(x<=i&&y>=j)
Min=MIN(sir[pos],Min);
if(i==j)return;
if(x<=(i+j)/2)
rmq2(i,(i+j)/2,pos*2);
if(y>(i+j)/2)
rmq2((i+j)/2+1,j,pos*2+1);
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n , m ;
scanf("%d%d",&n,&m);
for(int i=1; i<100000; i++)
sir[i]=200000000;
for(int i=1; i<=n; i++) {
scanf("%d",&e);
x=i;
rmq1(1,n,1);
}
for(int i=1; i<=m; i++) {
scanf("%d%d",&x,&y);
Min=200000000;
//rmq2(1,n,1);
printf("%d\n",Min);
}
}