Pagini recente » Cod sursa (job #358676) | Cod sursa (job #1046963) | Cod sursa (job #1542999) | Cod sursa (job #167894) | Cod sursa (job #2705988)
#include <fstream>
using namespace std;
ifstream f;
ofstream g;
int n, q;
int ai[100001 * 2 + 1];
int a[100001];
const int Inf = 1e5 + 1;
void read() {
int i;
f.open("rmq.in");
f >> n >> q;
for (i = 1; i <= n; i++)
f >> a[i];
}
void buildTree(int ind, int st, int dr) {
if (st == dr) {
ai[ind] = a[st];
return;
}
int mij = (st + dr) / 2;
buildTree(ind * 2, st, mij);
buildTree(ind * 2 + 1, mij + 1, dr);
ai[ind] = min(ai[ind * 2], ai[ind * 2 + 1]);
}
int querry(int ind, int st, int dr, int qst, int qdr) {
if (st > qdr || dr < qst)
return Inf;
if (st >= qst && dr <= qdr)
return ai[ind];
int mij = (st + dr) / 2;
int l = querry(ind * 2, st, mij, qst, qdr);
int d = querry(ind * 2 + 1, mij + 1, dr, qst, qdr);
return min(l, d);
}
void solve() {
int i, x, y;
g.open("rmq.out");
for (i = 1; i <= q; i++) {
f >> x >> y;
g << querry(1, 1, n, x, y) << '\n';
}
f.close();
g.close();
}
int main() {
read();
buildTree(1, 1, n);
solve();
return 0;
}