Pagini recente » Cod sursa (job #382024) | Istoria paginii utilizator/mutu_costina | Cod sursa (job #3232187) | Profil MirunaGroza | Cod sursa (job #3136802)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int NMAX = 1e5 + 5;
int put[NMAX], RMQ[17][NMAX], n, m;
int main(){
f >> n >> m;
for(int i = 1; i <= n; ++i){
f >> RMQ[0][i];
}
for(int i = 2; i <= n; ++i){
put[i] = put[i / 2] + 1;
}
for(int i = 1; (1 << i) <= n; ++i){
for(int j = 1; j <= n; ++j){
if(j + (1 << (i - 1)) <= n){
RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);
}
}
}
for(int k = 1; k <= m; ++k){
int x, y;
f >> x >> y;
int e = put[y - x + 1];
g << min(RMQ[e][x], RMQ[e][y - (1 << e) + 1]) << "\n";
}
return 0;
}