Pagini recente » Cod sursa (job #3287020) | Cod sursa (job #2109598) | Cod sursa (job #2625800) | Cod sursa (job #2534530) | Cod sursa (job #2097177)
/// 30 p
# include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a[100003], Min[100003];
int n, q;
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out","w", stdout);
int i, j, k;
scanf("%d %d", &n, &q);
for(i=1; i<=n; ++i)
scanf("%d", &a[i]);
/// retinem minimul pe bucati de sqrt(n)
int seg = sqrt(n);
for(i=1; i*seg<=n; ++i){
Min[i] = INF;
for(j=seg*(i-1) + 1; j<=seg * i; ++j)
if (a[j] < Min[i]) Min[i] = a[i];
}
while (q--){
scanf("%d %d", &i, &j);
int m = INF;
k = i;
while (k <= i) {
if ((k % seg == 0) && (k + seg <= j + 1)) {
m = min(m, Min[k / seg]);
k += seg;
} else {
m = min(m, a[k]);
++k;
}
}
printf("%d\n", m);
}
return 0;
}