Pagini recente » Cod sursa (job #3162464) | Cod sursa (job #352517) | Cod sursa (job #2611881) | Cod sursa (job #1538835) | Cod sursa (job #1997417)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int N = 1e5+10;
const int M = 1e7+10;
const int INF = 1e9;
int v[N];
int x[M];///?
int n, m;
int lef, rig;
int left(int i)
{
return 2*i + 1;
}
int right(int i)
{
return 2*i + 2;
}
int get(int node, int l, int r, int ll, int rr)
{
if(l >= ll && r <= rr)
{
return x[node];
}
if(r < ll || l > rr)
{
return INF;
}
int mid = (l + r) / 2;
return min(get(left(node), l, mid, ll, rr), get(right(node), mid+1, r, ll, rr));
}
void build(int node, int l, int r)
{
if(l == r)
{
x[node] = v[l];
return;
}
int mid = (l + r) / 2;
build(left(node), l, mid);
build(right(node), mid+1, r);
x[node] = min(x[left(node)], x[right(node)]);
}
int main()
{
fin >> n >> m;
for(int i = 0; i < n; ++i)
{
fin >> v[i];
}
build(0, 0, n-1);
for(int i = 0; i < m; ++i)
{
fin >> lef >> rig;
--lef;
--rig;
//cout << lef << " " << rig << "\t";
fout << get(0, 0, n-1, lef, rig) << "\n";
}
return 0;
}