Pagini recente » Cod sursa (job #1556097) | Cod sursa (job #37518) | Cod sursa (job #137812) | Cod sursa (job #1624021) | Cod sursa (job #3126053)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int MAX = 1e5 + 1;
const int MAX_LOG = 18;
int dp[MAX_LOG][MAX] , n , log[MAX] , a , b , q;
signed main(){
cin >> n >> q;
log[0] = -1;
for(int i = 1 ; i <= n ; i++){
cin >> dp[0][i];
log[i] = log[i/2] + 1;
}
for(int i = 1 ; i < MAX_LOG ; i++){
for(int j = (1<<i) ; j <= n ; j++){
dp[i][j] = min(dp[i-1][j],dp[i-1][j-(1<<(i-1))]);
}
}
while(q--){
cin >> a >> b;
int lungime = b-a+1;
lungime = log[lungime];
cout << min(dp[lungime][b],dp[lungime][a+(1<<lungime)-1]) << '\n';
}
return 0;
}