Pagini recente » Cod sursa (job #760601) | Cod sursa (job #3194367) | Cod sursa (job #498159) | Cod sursa (job #498150) | Cod sursa (job #2821647)
//RMQ
#include<fstream>
#define N 100001
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, v[N], Log[N], R[18][N], m;
void ConstructQuery(){
for(int i=1; i<=n; i++)
R[0][i] = v[i];
for(int i=1; i<=Log[n]; i++){
for(int j=1; j<=n-(1<<i)+1; j++){
R[i][j] = min( R[i-1][j], R[i-1][j+(1<<(i-1))] );
}
}
}
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
cin >> v[i];
}
for(int i=2; i<=n; i++)
Log[i] = Log[i/2] + 1;
ConstructQuery();
/*for(int i=0; i<=Log[n]; i++){
for(int j=1; j<=n-(1<<i)+1; j++)
cout << R[i][j] << " ";
cout << "\n";
}*/
for(int i=1; i<=m; i++){
int x, y;
cin >> x >> y;
cout << min( R[Log[y-x]][x], R[Log[y-x]][y-(1<<Log[y-x])+1]) << "\n";
}
}