Pagini recente » Cod sursa (job #1094454) | Cod sursa (job #1028611) | Cod sursa (job #98912) | Cod sursa (job #2129745) | Cod sursa (job #3248624)
#include <iostream>
#include <fstream>
using namespace std;
///
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define LOGMAX 20
#define NMAX 1000005
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;
}