Pagini recente » Cod sursa (job #372106) | Cod sursa (job #474805) | Cod sursa (job #1865202) | Cod sursa (job #282620) | Cod sursa (job #2461079)
#include <bits/stdc++.h>
FILE *in = fopen("rmq.in", "r"), *out = fopen("rmq.out", "w") ;
const int MV = 1e5 ;
const int LOG = 18 ;
int n, m ;
int rmq[MV + 5][LOG] ;
int v[MV + 5] ;
int LG[MV + 5] ;
void RMQ() {
int i, j ;
LG[1] = 1 ;
for (i = 1 ; i <= n ; ++ i) {
rmq[0][i] = v[i] ;
}
for (i = 2 ; i <= n ; ++ i) { LG[i] = 1 + LG[i >> 1] ; }
int j_limit(LG[n]) ;
for (j = 1 ; j <= j_limit ; ++ j) {
for (i = 1 ; i <= n - (1 << j) + 1 ; ++ i) {
rmq[j][i] = std::min(rmq[j - 1][i], rmq[j - 1][i + (1 << (j - 1))]) ;
}
}
}
int main() {
fscanf(in, "%d %d\n", &n, &m) ;
for (int i = 1 ; i <= n ; ++ i) {
fscanf(in, "%d\n", v + i) ;
}
RMQ() ;
int left, right, lg, answer ;
//std::cerr << rmq[2][1] ;
while (m --) {
fscanf(in, "%d %d\n", &left, &right) ;
lg = LG[right - left + 1] - 1 ;
answer = std::min(rmq[lg][left], rmq[lg][right - (1 << lg) + 1]) ;
fprintf(out, "%d\n", answer) ;
}
}