Pagini recente » Cod sursa (job #297621) | Cod sursa (job #1595826) | Cod sursa (job #1893047) | Cod sursa (job #2702342) | Cod sursa (job #2687289)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m;
int arbint[400005];
int x,y;
int pos_search;
int val;
int oo = 20000009;
void initialize_intervals() {
for (int i=1;i<2*n;i++) {
arbint[i] = oo;
}
}
void update_intervals(int pos, int st, int dr) {
if (pos_search < st || pos_search > dr) {
return;
}
if (st == dr) {
arbint[pos] = val;
return;
}
int mid = (st+dr)/2;
update_intervals(2*pos,st,mid);
update_intervals(2*pos+1,mid+1,dr);
arbint[pos] = min(arbint[2*pos],arbint[2*pos+1]);
}
int get_min(int pos, int st, int dr) {
if (y < st || x > dr) {
return oo;
}
if (x <= st && dr <= y) {
return arbint[pos];
}
int mid = (st+dr)/2;
return min(get_min(2*pos,st,mid),get_min(2*pos+1,mid+1,dr));
}
int main()
{
initialize_intervals();
f >> n >> m;
for (int i=1;i<=n;i++) {
f >> val;
pos_search = i;
update_intervals(1,1,n);
}
for (int i=1;i<=m;i++) {
f >> x >> y;
g << get_min(1,1,n) << '\n';
}
return 0;
}