Pagini recente » Cod sursa (job #2442034) | Cod sursa (job #2257064) | Cod sursa (job #2257066) | Cod sursa (job #1188739) | Cod sursa (job #1344352)
/// rmq
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMax 100005
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m;
int ARB[5 * NMax];
int val, pos;
int start, finish;
int maxim;
void update(int nod, int left, int right) {
if (left == right) {
ARB[nod] = val;
return;
}
int mid = (left+right)/2;
if (pos <= mid) update(2*nod, left, mid);
else update(2*nod+1, mid+1, right);
ARB[nod] = min(ARB[2*nod], ARB[2*nod+1]);
}
void query(int nod, int left, int right) {
if (start <= left && right <= finish) {
if (ARB[nod] < maxim)
maxim = ARB[nod];
return;
}
int mid = (left+right)/2;
if (start <= mid) query(2*nod, left, mid);
if (mid < finish) query(2*nod+1, mid+1, right);
}
void read() {
f>>n>>m;
for (int i=1;i<=n;i++) {
int x; f>>x;
val = x;
pos = i;
update(1,1,n);
}
for (int i=1;i<=m;i++) {
int x, y;
f>>x>>y;
start = x; finish = y;
maxim = 1<<30;
query(1,1,n);
g<<maxim<<'\n';
}
}
int main() {
read();
f.close(); g.close();
return 0;
}