Pagini recente » Cod sursa (job #1363759) | Cod sursa (job #159878) | Cod sursa (job #2667390) | Cod sursa (job #3168646) | Cod sursa (job #2741028)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int nmax = 1e5;
const int Lmax = 20;
int m[nmax + 1][Lmax], a[nmax + 1], lg[nmax + 1];
int n, q, x, y;
void citire(){
cin >> n >> q;
for(int i = 1; i <= n; ++i){
cin >> a[i];
}
}
void RMQ(){
for(int i = 1; i <= n; ++i){
m[0][i] = a[i];
}
for(int i = 1; (1 << i) <= n; ++i){
for(int j = 1; j <= n - (1 << i) + 1; ++j){
int lungime = (1 << i - 1);
m[i][j] = min(m[i - 1][j], m[i - 1][j + lungime]);
}
}
}
void Creare(){
lg[1] = 0;
for(int i = 2; i <= n; ++i){
lg[i] = lg[i / 2] + 1;
}
}
void solve(){
for(int i = 1; i <= q; ++i){
cin >> x >> y;
int distanta = y - x + 1;
int l = lg[distanta];
int ans = distanta - (1 << l);
cout << min(m[l][x], m[l][x + ans]) << "\n";
}
}
int main(){
citire();
Creare();
RMQ();
solve();
return 0;
}