Pagini recente » Cod sursa (job #2948026) | Cod sursa (job #548179) | Cod sursa (job #496100) | Cod sursa (job #869608) | Cod sursa (job #3245346)
#include <iostream>
#include <fstream>
using namespace std;
///
ifstream fin("rmq.in");
ofstream fout("rmq.out");
///
const int LOGMAX=20;
const int NMAX=1e5;
int n, q, v[NMAX+5], log[NMAX+5], rmq[LOGMAX+5][NMAX+5];
///
void formLog() {
log[1]=0;
for (int i = 2; i <= n; i++)
log[i]=log[i/2]+1;
}
///
void formRMQ() {
for (int i = 1; i <= n; i++)
rmq[0][i]=v[i];
int p=1;
for (int i = 1; i <= log[n]+1; i++) {
for (int j = 1; j <= n-p; j++)
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+p]);
p*=2;
}
}
///
int main() {
fin >> n >> q;
for (int i = 1; i <= n; i++)
fin >> v[i];
///
formLog();
formRMQ();
///
for (int i = 1; i <= q; i++) {
int l,r,m;
fin >> l >> r;
m=log[r-l+1];
fout << min(rmq[m][l],rmq[m][r-(1<<(m-1))]) << '\n';
}
return 0;
}