Pagini recente » Cod sursa (job #2493706) | Cod sursa (job #2137113) | Cod sursa (job #1997224) | Cod sursa (job #1482748) | Cod sursa (job #2836258)
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
int e[100010], a[17][100010];
int n,q;
int ex, j,x,y,len;
int main(void){
FILE* cout = fopen("rmq.out","w");
FILE* cin = fopen("rmq.in", "r");
fscanf(cin,"%d%d",&n,&q);
for(int i =1;i<=n;i++){
fscanf(cin,"%d",a[0][i]);
}
for(int p = 1;(1<<p)<=n;p++){
for(int i = 1;i<=n;i++){
a[p][i] = a[p-1][i];
j = i + (1<<(p-1));
if(j <= n && a[p][i] > a[p-1][j])
a[p][i] = a[p-1][j];
}
}
for(int i = 2;i<=n;i++){
e[i] = 1+e[i/2];
}
for(int i =0;i<q;i++){
x,y;
fscanf(cin,"%d%d",&x,&y);
ex = e[y-x+1];
len = 1<<ex;
fprintf(cout,"%d",min(a[ex][x], a[ex][y-len+1]));
}
}