Pagini recente » Cod sursa (job #1424367) | Cod sursa (job #496880) | Cod sursa (job #1623474) | Cod sursa (job #1647439) | Cod sursa (job #2903385)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int arb_int[4000001];
void facere(int nod, int st, int dr, int poz, int val)
{
//if (poz < st or poz > dr) return;
if (st == dr){
arb_int[nod] = val;
return;
}
int mjl = (st + dr) / 2;
if (poz <= mjl) facere(2*nod, st, mjl, poz, val);
else facere(2*nod+1, mjl+1, dr, poz, val);
arb_int[nod] = min(arb_int[2*nod], arb_int[2*nod+1]);
}
int get_min(int nod, int st, int dr, int q_st, int q_dr)
{
//if (q_st > dr or q_dr < st) return 100001;
if (st >= q_st and dr <= q_dr) return arb_int[nod];
int mjl = (st + dr) / 2;
int part1 = 100001, part2 = 100001;
if (q_st <= mjl) part1 = get_min(2*nod, st, mjl, q_st, q_dr);
if (mjl+1 <= q_dr) part2 = get_min(2*nod+1, mjl+1, dr, q_st, q_dr);
return min(part1,part2);
}
int main()
{
int n, t;
fin>>n>>t;
for (int i = 1; i <= n; i++){
int a;
fin>>a;
facere(1, 1, n, i, a);
}
for(int i = 1; i <= t; i++){
int a, b;
fin>>a>>b;
fout<<get_min(1, 1, n, a, b)<<"\n";
}
return 0;
}