Pagini recente » Cod sursa (job #2840897) | Profil Daria09 | Cod sursa (job #522041) | Statistici dragos balan (dragosuge) | Cod sursa (job #2013767)
#include <fstream>
using namespace std;
int dp[100010][25];
int v[100010];
int log[100010];
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int Range_Query(int n, int x, int y){
int l = log[y-x];
return min(dp[x][l], dp[y-(1<<l)][l]);
}
int main(){
int n;
cin >> n;
int m;
cin >> m;
for(int i = 1; i <= n; ++i){
cin >> v[i];
}
for(int i = 1; i < n; ++i){
dp[i][0] = min(v[i], v[i+1]);
}
for(int i = 2; i <= n; ++i){
log[i] = log[i/2] + 1;
}
for(int j = 1; j <= log[n]; ++j){
for(int i = 1; i <= n; ++i){
if(i + (1<<j) > n) break;
dp[i][j] = min(dp[i][j-1], dp[i + (1 << (j-1))][j-1]);
}
}
for(int i = 0, x, y; i < m; ++i){
cin >> x >> y;
if(x == y){
cout << v[x] << '\n';
continue;
}
cout << Range_Query(n, x, y) << '\n';
}
return 0;
}