Pagini recente » Cod sursa (job #1328456) | Cod sursa (job #2675958) | Cod sursa (job #3170083) | Cod sursa (job #3239579) | Cod sursa (job #1368306)
// rmq
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMax 100005
#define inf (1<<30)+100
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,q;
int arbmin[8*NMax];
int val, poz;
int st, dr; // Fixed
int sol;
void query(int node, int left, int right) {
if (st <= left && right <= dr) {
sol = min(sol, arbmin[node]);
return;
}
int mid = (left+right)/2;
if (mid >= st)
query(2*node, left, mid);
if (mid < dr)
query(2*node+1, mid+1, right);
}
void update(int node, int left, int right) {
if (left == right) {
arbmin[node] = val;
return;
}
int mid = (left+right)/2;
if (poz >= left && poz <= mid)
update(2*node, left, mid);
if (poz > mid && poz <= right)
update(2*node+1, mid+1, right);
arbmin[node] = min(arbmin[2*node], arbmin[2*node+1]);
}
void read() {
f>>n>>q;
for (int i=1;i<=n;i++) {
f>>val;
poz = i;
update(1,1,n);
}
for (int i=1;i<=q;i++) {
f>>st>>dr;
sol = inf;
query(1,1,n);
g<<sol<<'\n';
}
}
int main() {
read();
f.close(); g.close();
return 0;
}