Pagini recente » Cod sursa (job #1970172) | Cod sursa (job #851414) | Cod sursa (job #1001312) | Cod sursa (job #1258393) | Cod sursa (job #2013613)
#include <fstream>
#include <math.h>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int A[100100];
int dp[100100][20];
int main() {
int n, m;
cin>>n>>m;
for (int i=1; i<=n; i++){
cin>>A[i];
}
for (int i=1; i<=n; i++){
dp[i][0] = A[i];
}
for (int i=n; i>=1; i--){
for (int j=1; pow(2, j) <= n - i; j++){
dp[i][j] = min(dp[i][j-1], dp[i + (int)pow(2, j-1)][j-1]);
//cout<<i<<" "<<j<<" "<<dp[i][j-1]<<" "<<dp[i + (int)pow(2, j-1)][j-1]<<'\n';
}
}
/*cout<<'\n';
for (int i=1; i<=n; i++){
for (int j=0; pow(2, j) <= n - i + 1; j++){
cout<<dp[i][j]<<" ";
}
cout<<'\n';
}
cout<<'\n';*/
for (int i=1; i<=m; i++){
int a, b;
cin>>a>>b;
int d = b - a + 1;
int l = (int)log2(d);
cout<<min(dp[a][l], dp[b - (int)pow(2, l) + 1 ][l])<<'\n';
}
return 0;
}