Pagini recente » Cod sursa (job #2463140) | Profil UAICBlanaruOlariuOloieri | Cod sursa (job #1162787) | Cod sursa (job #1620406)
#include <fstream>
#define LMAX 18
#define NMAX 100007
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int Dp[LMAX][NMAX];
int Lg[NMAX];
int n, m;
int main(){
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> Dp[0][i];
for(int i = 1; (1 << i) <= n; ++i)
for(int j = 1; j <= n - (1 << i) + 1; ++j)
Dp[i][j] = min(Dp[i - 1][j], Dp[i - 1][j + (1 << (i - 1))]);
Lg[1] = 0;
for(int i = 2; i <= n; ++i)
Lg[i] = Lg[i / 2] + 1;
while(m--){
int a, b;
cin >> a >> b;
int l = Lg[b - a + 1];
int Number = b - a + 1 - (1 << l);
cout << min(Dp[l][a], Dp[l][a + Number]) << "\n";
}
return 0;
}