Pagini recente » Cod sursa (job #2919423) | Cod sursa (job #2885322) | Cod sursa (job #2737630) | Cod sursa (job #2747194) | Cod sursa (job #2741022)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int nmax = 1e5 + 1;
const int logNmax = log(1e5);
int rmq[nmax][logNmax], a[nmax], n, lungime, m, x, y;
int lg[nmax];
void RMQ(int rmq[][logNmax], int a[nmax]){
for(int i = 1; i <= n; ++i){
rmq[0][i] = a[i];
}
for(int i = 1; 1 << i <= n; ++i){
for(int j = 1; j <= n - (1 << i) + 1; ++j){
lungime = 1 << (i - 1);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + lungime]);
}
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; ++i){
cin >> a[i];
}
RMQ(rmq, a);
lg[1] = 0;
for(int i = 2; i <= n; ++i){
lg[i] = lg[i / 2] + 1;
}
for(int i = 1; i <= m; ++i){
cin >> x >> y;
int distanta = y - x + 1;
int l = lg[distanta];
int ans = distanta - (1 << l);
cout << min(rmq[l][x], rmq[l][x + ans]) << "\n";
}
return 0;
}