Pagini recente » Cod sursa (job #887474) | Cod sursa (job #2181910) | Cod sursa (job #2202410) | Cod sursa (job #826585) | Cod sursa (job #533457)
Cod sursa(job #533457)
#include<stdio.h>
int rmq[19][100001];
int n;
int m;
int min(int a, int b) {
if (a < b) return a;
return b;
}
int loga(int t) {
int v = 0;
while (t != 1) {
v++;
t /= 2;
}
return v;
}
void PreProc() {
for(int i = 1; i <= 18; i++)
for(int j = 1; j + (1 << i) - 1 <= n; j++) {
rmq[i][j] = min(rmq[i - 1][j], rmq[i-1][j + (1 << (i - 1))]);
}
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 1; i <= n; i++) {
scanf("%d",&rmq[0][i]);
}
PreProc();
for(int i = 1; i <= m; i++) {
int x, y, z;
scanf("%d %d",&x, &y);
z = loga(y - x + 1);
printf("%d\n",min(rmq[z][x],rmq[z][y - (1 << z) + 1]));
}
return 0;
}