Pagini recente » Cod sursa (job #207280) | Cod sursa (job #195114) | Scrie articole | Cod sursa (job #1136078) | Cod sursa (job #1857367)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[100005], log[100005];
int sol[20][100005], m,n,i,j,x,y,delta,shf;
void build() {
int i, j;
for (i = 1; (1<<i) <= n; i++) {
for (j = 1; j+(1<<i)-1 <= n; j++)
sol[i][j] = min(sol[i-1][j], sol[i-1][j+(1<<(i-1))]);
}
}
int main() {
f >> n >> m;
for (i = 1; i <= n; i++)
f >> a[i], sol[0][i] = a[i];
for (i = 2; i <= n; i++)
log[i]=log[i/2]+1;
build();
while (m--) {
f >> x >> y;
delta = (y-x+1);
i = log[delta];
shf=delta-(1<<i);
g << min(sol[i][x], sol[i][x+shf]) << '\n';
}
return 0;
}