Pagini recente » Cod sursa (job #1301748) | Cod sursa (job #2701085) | Utilizatori inregistrati la ONIS 2014, Runda 1 | Cod sursa (job #3202038) | Cod sursa (job #2097201)
/// 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);
k = 0; Min[0] = INF;
for(i=1; i<=n; ++i){
if (i % seg == 0) {
++k;
Min[k] = INF;
}
Min[k] = min(Min[k], a[i]);
}
while (q--){
scanf("%d %d", &i, &j);
int m = a[i];
k = i;
while (k <= j) {
if ((k % seg == 0) && (k + seg <= j)) {
m = min(m, Min[k / seg]);
k += seg;
} else {
m = min(m, a[k]);
++k;
}
}
printf("%d\n", m);
}
return 0;
}