Pagini recente » Cod sursa (job #2412216) | Cod sursa (job #2618975) | Cod sursa (job #2540716) | Cod sursa (job #1383793) | Cod sursa (job #2906310)
#include <fstream>
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
constexpr int N = 1e5+1;
int rez[18][N], log[N];
void precalculare(int n){
int lim = log[n] + 1;
for(int power=1; power <= lim; ++power){
for(int i = (1 << power) - 1; i<=n; ++i){
int p = 1 << (power-1);
rez[power][i] = std::min(rez[power-1][i - p], rez[power-1][i]);
}
}
}
void calc_log(int n){
log[1] = 0;
for(int i=2; i<=n; ++i)
log[i] = 1 + log[i/2];
}
int main(){
int n, m;
in >> n >> m;
calc_log(n);
for(int i=0; i<n; ++i)
in >> rez[0][i];
precalculare(n);
for(int i=0; i<m; ++i){
int st, dr;
in >> st >> dr;
st--;
dr--;
int power = log[dr-st+1];
out << std::min(rez[power][st - 1 + (1 << power)], rez[power][dr]) << '\n';
}
}