Pagini recente » Cod sursa (job #965951) | Cod sursa (job #15928) | Cod sursa (job #1842617) | Cod sursa (job #1835340) | Cod sursa (job #2554044)
#include <fstream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#include <map>
#include <string.h>
#include <queue>
#include <stack>
#define INF 0x3f3f3f3f
using namespace std;
#ifdef DEBUG
string name = "data";
#else
string name = "rmq";
#endif
ifstream fin(name + ".in");
ofstream fout(name + ".out");
#define MAXN 100005
#define MAXL 17
int n, m;
int rmq[MAXL][MAXN];
int lg[MAXN];
int main() {
fin >> n >> m;
memset(rmq, 0x3f, sizeof(rmq));
int last = 0;
int lastVal = 1;
for (int i = 1; i <= n; ++i) {
fin >> rmq[0][i];
if (i == (lastVal * 2)) {
last++;
lastVal = i;
}
lg[i] = last;
}
for (int j = 1; (1 << j) <= n; ++j) {
int l = (1 << j) - 1;
for (int i = 1; i <= n - l; ++i) {
rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][i + l]);
}
}
for (int i = 0; i < m; ++i) {
int x, y;
fin >> x >> y;
int d = y - x + 1;
int k = lg[d];
int nd = y - (1 << k) + 1;
fout << min(rmq[k][x], rmq[k][nd]) << "\n";
}
return 0;
}