Pagini recente » Cod sursa (job #2902660) | Cod sursa (job #2448762) | Cod sursa (job #1489016) | Cod sursa (job #253570) | Cod sursa (job #1125848)
#include <iostream>
#include <fstream>
#define nmax 100005
#define inf (1<<30)
#define logmax 20
using namespace std;
int n, m, v[nmax], log[nmax], a, b, rmq[logmax][nmax];
int solve(int a, int b) {
int k = log[b-a+1];
return min(rmq[k][a], rmq[k][b-(1<<k)+1]);
}
int main() {
ifstream f("rmq.in");
ofstream g("rmq.out");
f>>n>>m;
for(int i=1; i<=n; i++) f>>v[i];
for(int i=2; i<=n; i++) log[i] = log[i/2] + 1;
for(int i=1; i<=n; i++) rmq[0][i] = v[i];
for(int j=1; (1<<j)<=n; j++) {
for(int i=1; i<=n; i++) rmq[j][i] = inf;
}
for(int j=1; (1<<j)<=n; j++)
for(int i=1; i<=n; i++)
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i+1<<(j-1)]);
for(int i=1; i<=m; i++) {
f>>a>>b;
g<<solve(a, b)<<"\n";
}
return 0;
}